golang闭包有什么用

互联网 19-12-27

什么是闭包?

Go 函数可以是一个闭包。闭包是一个函数值,它引用了函数体之外的变量。 (推荐学习:go)

这个函数可以对这个引用的变量进行访问和赋值;换句话说这个函数被“绑定”在这个变量上。

我的不靠谱的理解,一个闭包相当于一个类的实例,函数体之外的变量相当于这个实例存储的变量。

没有闭包的时候,函数就是一次性买卖,函数执行完毕后就无法再更改函数中变量的值(应该是内存释放了);

有了闭包后函数就成为了一个变量的值,只要变量没被释放,函数就会一直处于存活并独享的状态,因此可以后期更改函数中变量的值(因为这样就不会被go给回收内存了,会一直缓存在那里)。

闭包的主要意义

缩小变量作用域,减少对全局变量的污染。下面的累加如果用全局变量进行实现,全局变量容易被其他人污染。

同时,所有我要实现n个累加器,那么每次需要n个全局变量。

利用背包,每个生成的累加器myAdder1, myAdder2 := adder(), adder()有自己独立的sum,sum可以看作为myAdder1.sum与myAdder2.sum。

利用背包可以实现有自身状态的函数!

package main  import ( 	"fmt" )  func adder() func(int) int { 	sum := 0 	return func(x int) int { 		sum += x 		return sum 	} }  func main() { 	myAdder := adder() 	 	// 从1加到10 	for i := 1; i <= 10; i++ { 		myAdder(i) 	} 	 	fmt.Println(myAdder(0)) 	// 再加上45 	fmt.Println(myAdder(45)) }

结果:

55// 1+...+10 100

以上就是golang闭包有什么用的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: golang
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:golang 主要做什么

相关资讯