Q:当编写实体的 CRUD 接口的时候,到底是向上层传指针呢,还是传实体? 举个例子:
// 实体
type person struct {
ID uint
name string
age uint
}
// 指针传递
func getPerson(ID uint) (*person, error) {
return nil,errors.New("err")
}
// 值传递
func getPerson_second(ID uint) (person, error) {
return person{}, errors.New("err")
}
纠结这个问题其实是因为在写接口的过程中发现,Go 里是没办法让一个实体类直接返回 nil ,只能返回默认构造参数的结构体,不然 ide 会报错,而使用结构体的指针可以返回 nil 。我虽然明白可以通过 err 返回值来处理错误,但是总觉得生成一个和非空的类外表一样的类返回给上层,会有潜在的危险,并且当类比较复杂的时候,可能会产生额外的开销。
接下来这个延申问题同样很困扰我:像 Go 这样存在指针而且语法很像 C/C++系但同时又存在 GC 的语言,大量使用指针传递对 GC 来说是好还是坏?要是在 IO 密集的 Web 应用场景下,这样大量地使用指针在堆上分配空间会不会加重 GC 的负担,反而会比值传递这种栈复制来得更慢,而不是让程序变得更快?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.