本文摘自网络,作者,侵删。
关于闭包变量逃逸
请看下面一段代码:
func f() *Cursor {
var c Cursor
c.X = 500
return &c
}
在Go语言中 方法内定义了一个变量c ,并最后返回其地址,理论上函数内定义变量使用的是函数内的栈空间,当函数返回时候栈空间就会释放掉,但是golang 使用了escape analyze 语法会自动识别出这种这种变量,并在堆中给其分配内存空间,二不是在函数的栈中。这种情况就是闭包逃逸,并移到了堆中。
返回一个闭包时,并不是单纯的返回一个函数,而是返回了一个结构体,记录下函数返回地址和引用的环境中的变量地址。
本文来自:简书
感谢作者:溪花
查看原文:golang escape analyze
相关阅读 >>
分享一款Golang style语法的Golang orm库
更多相关阅读请进入《Go》频道 >>

Go语言101
一个与时俱进的Go编程知识库。