golang中的闭包的再说明"/>
golang中的闭包的再说明
package mainimport ("fmt" )//函数返回值为一个函数,函数的参数是一个int的参数,返回值也是int func getSum() func(int)int{var sum int = 0return func(num int) int {sum += numreturn sum} } //闭包是什么,返回的匿名函数+匿名函数以外的那个变量sum, //闭包就是一个函数和与其相关的引用环境组合的一个整体 func main() {f:= getSum() //没用形参的函数,赋值给F,f()调用的复制,相当于给getSum的返回值赋值,也就是func(int)int{},这个匿名函数的形参num =1fmt.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 = 0sum += numreturn sum} //不使用闭包,想保留的值不可以反复使用,闭包可以保留上次引用的某个值,传入一次就可以反复使用
更多推荐
golang中的闭包的再说明
发布评论