go 闭包函数

go 支持return是函数,相当于(递归函数的意思,一层层返回)

闭包:外层函数里有内层函数,内层函数调用外层函数局部变量(外层函数参数或者定义的变量),并且该外层函数的返回值就是其内层函数,该内层函数和外层函数的局部变量称为闭包结构。

局部变量的生命周期发生改变,过去是随函数结束而销毁。

现在是内层函数需要调用变量,所以变量没有销毁

func main() {

a := info()//返回值是匿名函数,即 a = fun1
fmt.Println("%T\n",a)//返回是匿名函数地址0x10937b0,相当于一个函数
v1 := a()
fmt.Println(v1)//值是1
v2 :=a()
fmt.Println(v2)//值是2
fmt.Println(a())//值是3
/* 调用同一个info()的i变量,i的地址是同一个*/
b :=info()
v3 :=b()
fmt.Println(v3)//值是1
/* 调用另一个info()的i变量,i的地址变了*/
}

func info() func() int{
i:=0
fun1 := func() int{
i++
return i
}
return fun1
或:
return func() int {
i++
return i
}

}

 

posted @ 2019-10-14 11:04  星云惊蛰  阅读(324)  评论(0)    收藏  举报