刚开始学习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哪
哪位大神能从原理上给解答一下,非常感谢
上面的可以转换成这样:
输出:
内部声明的变量return func() 变量没在一个func内应用回收掉, 就产生内存逃逸了, 把i这个内存从栈上分配到堆上了