请教一下 golang 函数返回结构体或者结构体指针到底有什么区别?
去 go 论坛提问应该更好? 返回结构体应该是 copy。 指针的话应该不需要 copy。 现在很多库都喜欢 zero copy。
其他没指针的语言,比如 python 返回的是 copy 吗?
python 我知道,比如 python 返回一个列表,代表着返回了列表的指针
这个我最近正好研究了一下,这个和内存逃逸有关系。
首先明确一点:在函数内创建的变量在栈上。
interface{}
两种方法比较之下,可以得到结论:
返回指针可以继续用 new 后存储的数据和结构体的方法,更改后旧的数据同步更改。 返回结构体就是不想再和旧的有关,需要独立出来使用就这样才好
返回结构会 copy,内存会分配在栈里,父级函数结束会直接释放内存 返回结构指针,内存会分配在堆里,由 GC 自动释放。
但是也有一些情况会导致返回结构分配在堆里,比如对象太大和对外引用