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

来源:互联网 发布:大学生网络安全隐患 编辑:程序博客网 时间:2024/06/03 03:11

函数是一个变量类型

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 mainimport("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("%d\n",sum)}

输出3

命名返回值、忽略返回值

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

package mainimport("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)}

输出如下:

333 1

可变参数

package mainimport("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 mainimport("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 method3defer method afterdefer main2defer main1

匿名函数

package mainimport("fmt")//匿名函数1var (    result = func(a int,b int) int{        return a + b    })//非匿名函数func sum1(a int,b int)int {    return a + b}//匿名函数2func 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))}

输出如下:

371016