package main import ( "fmt" ) //函数返回值为一个函数,函数的参数是一个int的参数,返回值也是int func getSum() func(int)int{ var sum int = 0 return func(num int) int { sum += num return sum } } //闭包是什么,返回的匿名函数+匿名函数以外的那个变量sum, //闭包就是一个函数和与其相关的引用环境组合的一个整体 func main() { f:= getSum() //没用形参的函数,赋值给F,f()调用的复制,相当于给getSum的返回值赋值,也就是func(int)int{},这个匿名函数的形参num =1 fmt.Println(f(1)) fmt.Println(f(2)) fmt.Println(f(3)) // 匿名函数引用的变量会一直保存在内存中,可以一直使用 //闭包的本质,是一个匿名函数,这个匿名函数需要引入外部的参数 //匿名函数+引用的参数=闭包 // 返回的是一个匿名函数,但是这个匿名函数引用到的函数外的变量参数,因此这个匿名 //函数就和变量参数形成了一个整体,构成闭包 //闭包中使用的变量参数会一直保存在内存中,所以会一直使用,意味着闭包不可以滥用 //对内存消耗大,什么情况下使用闭包 fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~") fmt.Println(getsum01(1)) fmt.Println(getsum01(2)) fmt.Println(getsum01(3)) } func getsum01(num int)int{ var sum int = 0 sum += num return sum } //不使用闭包,想保留的值不可以反复使用,闭包可以保留上次引用的某个值,传入一次就可以反复使用
golang中的闭包的再说明
最新推荐文章于 2024-08-23 13:40:49 发布