大家好。
我在本站搜索了下,没有搜到相关内容,所以开贴问一下。
以前都是返回的指针:
```
func getItem(itemId int) *model.Item {
i := model.item{}
i.Name = "abc"
return &i
}
```
这样会逃逸到堆上
如果上面的方法,直接返回:`model.Item`,是会发生栈拷贝吧?
请问哪种方式比较好?
还是10楼说的有道理。不要什么都用指针,只有大结构体,全局变量适合用指针。普通对象指针用多了会发生内存逃逸,导致gc压力过大。 go官方一些规范里面,也是推荐一般情况下传值。
#11
更多评论
凡是struct我都返回指针。
连map和slice很多时候我都会返回指针(用type自定义一个类型,比如type xxxx *[]string)。
优点是以后如果重构,基本不会调整调用方的代码。
都用自动GC的语言了,不要过多考虑细节。
细节等具体业务跑起来根据实际情况再优化。
#1