大家好。
我在本站搜索了下,没有搜到相关内容,所以开贴问一下。
以前都是返回的指针:
```
func getItem(itemId int) *model.Item {
i := model.item{}
i.Name = "abc"
return &i
}
```
这样会逃逸到堆上
如果上面的方法,直接返回:`model.Item`,是会发生栈拷贝吧?
请问哪种方式比较好?
建议用指针。因为如果函数返回会执行栈上拷贝,在栈上去创建了一个新的对象。旧的对象就交给了gc了。这样从性能角度考虑,如果返回指针,只不过对象从栈上逃逸到了堆上了。没有去创建新的对象。也不许gc去处理旧的对象。
#7
更多评论
凡是struct我都返回指针。
连map和slice很多时候我都会返回指针(用type自定义一个类型,比如type xxxx *[]string)。
优点是以后如果重构,基本不会调整调用方的代码。
都用自动GC的语言了,不要过多考虑细节。
细节等具体业务跑起来根据实际情况再优化。
#1