本文以go语言为例,为大家分析go语言中闭包的作用。阅读完整文相信大家对go语言中闭包有了一定的认识。在理解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
看完上述内容,你们对go语言中闭包的作用有进一步的了解吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。