登录
首页 >  Golang >  Go问答

为什么Go标准库更喜欢指针接收器?

来源:stackoverflow

时间:2024-04-06 08:39:38 318浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《为什么Go标准库更喜欢指针接收器?》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

go 标准库更喜欢指针接收器是否有原因,即使值接收器可以工作?

例如,在 go 1.14 io.multiwriter 中:

type multiWriter struct {
    writers []Writer
}

func (t *multiWriter) Write(p []byte) (n int, err error) {
...
}

...
func MultiWriter(writers ...Writer) Writer {
...
   return &multiWriter{allWriters}
}

即使函数返回 multiwriter 值而不是 &multiwriter{allwriters},并且 func (t *multiwriter) write 有一个值接收器,这也可以工作。

go 标准库一贯偏爱指针接收器是否有原因?


解决方案


MultiWriter 的方法确实可以跳过指针接收器,但由于 MultiWriter 返回一个接口,而 Go 中的接口仅包含 type and a pointer to the data,因此您无论如何都需要单独分配一个结构体。

这里的一个有趣的点是,据我所知,这是一个实现细节,而不是 the spec 的一部分。人们可以想象一种替代的 Go 实现,它使用内存中接口的不同表示,可能允许小型结构直接适合接口值,无需指针。

没有。

有时是出于兼容性原因(例如,因为第一个版本不适用于值接收器)。有时是出于一致性原因。有时这是作者的偏好。这里没有太多可看或可学的内容。

理论要掌握,实操不能落!以上关于《为什么Go标准库更喜欢指针接收器?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>