gpt4 book ai didi

go - Go构造函数中的返回值与指针

转载 作者:IT老高 更新时间:2023-10-28 13:09:03 25 4
gpt4 key购买 nike

在 go 中构建一个简单的对象时,这些替代方案有什么区别?

func NewGender(value string) Gender {
return Gender{strings.TrimSpace(value)}
}

func NewGender(value string) *Gender {
return &Gender{strings.TrimSpace(value)}
}

最佳答案

这个问题非常广泛,很大程度上取决于 API 的其余部分。因此,这里只是您在选择一个而不是另一个时可能需要考虑的一些事项(无特定顺序):

  • 不必要的指针会给 GC 带来更多的工作。您可能会通过返回一个指针(一个字)而不是一个结构(零到多个字)来赢得一些时间,但其中一些时间可能稍后会被 GC 扫描消耗掉。

  • 指针也可以表示某事物的存在或不存在,尽管通常最好使用 comma-ok 习惯用法,否则会返回错误。

  • 说到错误,如果返回 nil 有错误,错误被忽略的机会就更小了(因为 nil 指针取消引用会导致 panic)。再说一次,我不认为忽略错误的人是你真正应该考虑的事情。

  • 如果您需要某种形式的跟踪(例如,检查构造函数创建的所有实例的可能性),您必须返回一个指针,以便检查器可以看到对值的所有更改.

  • 如果大多数类型的方法都有一个指针接收器,或者 API 中的大多数函数接受指向该类型而不是值的指针,则返回指针更符合人体工程学。

关于go - Go构造函数中的返回值与指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32208363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com