加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang基础-函数是变量、自定义type、命名返回值、可变参、defer

发布时间:2020-12-16 09:45:24 所属栏目:大数据 来源:网络整理
导读:函数是一个变量类型 package mainimport( "fmt" )func main() { c := add fmt.Println(c) sum := c( 10 , 20 ) fmt.Println( sum )}func add ( a ,b int) int { return a + b} 输出如下: 0x488a0030 自定义一个type类型函数model package main import ( "fm

函数是一个变量类型

package main

import("fmt"

)

func main() {
        c := add
        fmt.Println(c)

        sum := c(10,20)
        fmt.Println(sum)
}


func add(a,b int) int {
    return a + b
}

输出如下:

0x488a00
30

自定义一个type类型函数model

package main

import("fmt"

)
//定义一个type类型,func(int,int) int 构造一种方法的模型
type methodModel func(int,int) int 

func add(a int,b int) int {
    return a+b
}
//接受一个类似methodModel方法的具体方法
func operator(entity methodModel,a int,b int)int{
    return entity(a,b)
}

func main() {
        var a int = 1
        var b int = 2
        c:= add
        sum := operator(c,a,b)
        fmt.Printf("%dn",sum)
}

输出3

命名返回值、忽略返回值

1、值传递
2、引用传递
注意1:无论是值传递,还是引用传递,传递给函数的都是变量的副本
不过,值传递是值的拷贝。引用传递是地址的拷贝
map、slice、chan、指针、interface默认以引用的方式传递

package main

import("fmt"

)

func add(a,b int) (c int) {
    c = a + b
    return
}


func calc(a,b int) (sum int,avg int) {
    sum = a + b
    avg = (a +b)/2
    return
}


func main() {
        var a int = 1
        var b int = 2

        c := add(a,b)
        fmt.Println(c)

        sum,_ := calc(a,b)
        fmt.Println(sum)

        sum1,avg1 := calc(a,b)
        ``
mt.Println(sum1,avg1)
}

输出如下:

3
3
3 1

可变参数

package main

import("fmt"

)

func add(a int,args ... int)(result int) {
    result = a
    for i:=0;i<len(args);i++{
        result += args[i]
    }
    return
}

func main() {
    sum := add(1,2,3)
    fmt.Print(sum)

}

输出如下:6

defer用途

  1. 当函数返回时,执行defer语句。因此,可以用来做资源清理
  2. 多个defer语句,按先进后出的方式执行
  3. defer语句中的变量,在defer声明时就决定了
package main

import("fmt"

)

func add(a int,b int) int{
    defer fmt.Println("defer method")
    return a + b
}

func main() {
    defer fmt.Println("defer main1")
    defer fmt.Println("defer main2")
    sum := add(1,2)
    fmt.Print(sum,"n")

    defer fmt.Println("defer method after")

}

输出如下:

defer method 3 defer method after defer main2 defer main1

匿名函数

package main

import("fmt"

)

//匿名函数1
var (
    result = func(a int,b int) int{
        return a + b
    }
)

//非匿名函数
func sum1(a int,b int)int {
    return a + b
}

//匿名函数2
func sum2(a int,b int) int {
    tempMethod := func(a int,b int) int {
        return a + b
    } 
        return tempMethod(a,b)
}



func sum3(a int,b int ) int {
    resultTemp := func(a int,b int )int {
        return a + b
    }(a,b)
    return resultTemp
}

func main() {

    sum := result(1,2)
    fmt.Println(sum)

    method:=sum1
    fmt.Println(method(3,4))

    fmt.Println(sum2(4,6))

    fmt.Println(sum3(7,9))
}

输出如下:

3
7
10
16

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读