go 匿名函数
刚开始学习go语言,在做匿名函数的例子,遇到一些问题
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
func main() {
nextInt := intSeq()
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
}
上面的代码执行的结果是 1 2 3
为什么结果不是1 1 1哪
哪位大神能从原理上给解答一下,非常感谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
上面的可以转换成这样:
输出:
内部声明的变量return func() 变量没在一个func内应用回收掉, 就产生内存逃逸了, 把i这个内存从栈上分配到堆上了
这就是闭包,i是在匿名函数外层定义的,这个i是公用的
那个i指向的是同一个内存地址
内存逃逸,你可以在return func()里面打印,i都是同一个地址,后面的i自增都是对同一地址i操作。
除非改成这样: