大家好。
我在本站搜索了下,没有搜到相关内容,所以开贴问一下。
以前都是返回的指针:
```
func getItem(itemId int) *model.Item {
i := model.item{}
i.Name = "abc"
return &i
}
```
这样会逃逸到堆上
如果上面的方法,直接返回:`model.Item`,是会发生栈拷贝吧?
请问哪种方式比较好?
指针和常驻有什么关系…………
比如标准库的http包
request,cookie明显不是常驻的,实际使用的时候都是指针。
本质上来说,指针和[]byte都是有特殊含义的。
指正指在内存中的一片抽象的数据,[]byte指抽象的内存空间。
返回一个具体的struct本身的花,说明你除了抽象的数据之外有别的逻辑上的目的在里面。
所以只有明确你的特殊目的才会直接返struct。
这是一个逻辑问题……
至于我说的
“自动GC的语言了,不要过多考虑细节”
你都用runtime的自动gc了,所有的细节其实是依赖于你的runtime而不是你自己的代码了。
你考虑细节很可能随着版本的升级与你的目的背道而驰了。
#12
更多评论
凡是struct我都返回指针。
连map和slice很多时候我都会返回指针(用type自定义一个类型,比如type xxxx *[]string)。
优点是以后如果重构,基本不会调整调用方的代码。
都用自动GC的语言了,不要过多考虑细节。
细节等具体业务跑起来根据实际情况再优化。
#1