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

Pointers 为什么go标准库更喜欢指针接收器?,pointers,go,Pointers,Go,Go标准库喜欢指针接收器,哪怕是在值接收器可以工作的地方,这有什么原因吗 例如,在: 类型多编写器结构{ 作家 } func(t*多写器)写入(p[]字节)(n int,err error){ ... } ... func多编写器(编写器…编写器)编写器{ ... 返回多写入程序{allWriters}(&M) } 即使函数返回的不是&multiWriter{allwriter},而是multiWriter值,并且func(t*multiWriter)Write有一个值接收器,这也会起作用 g

Go标准库喜欢指针接收器,哪怕是在值接收器可以工作的地方,这有什么原因吗

例如,在:

类型多编写器结构{
作家
}
func(t*多写器)写入(p[]字节)(n int,err error){
...
}
...
func多编写器(编写器…编写器)编写器{
...
返回多写入程序{allWriters}(&M)
}
即使函数返回的不是
&multiWriter{allwriter}
,而是
multiWriter
值,并且
func(t*multiWriter)Write
有一个值接收器,这也会起作用


go标准库一贯倾向于指针接收器,这有什么原因吗?

multiWriter
的方法确实可以跳过指针接收器,但由于
multiWriter
返回一个接口,而go中的接口只包含一个,因此您仍然需要单独分配一个结构


这里有趣的一点是,据我所知,这是一个实现细节,而不是。我们可以想象另一种Go实现,它在内存中使用不同的接口表示,可能允许小结构直接装入接口值,而无需指针。

multiWriter
的方法确实可以跳过指针接收器,但是,由于
MultiWriter
返回一个接口,而Go中的接口只包含一个,因此您仍然需要单独分配一个结构

这里有趣的一点是,据我所知,这是一个实现细节,而不是。我们可以想象另一种Go实现,它在内存中使用不同的接口表示,可能允许小结构直接装入接口值,而无需指针

go标准库一贯偏爱指针接收器,这有什么原因吗

没有

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

go标准库一贯偏爱指针接收器,这有什么原因吗

没有


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

在这种情况下,我认为使用指针接收器更有意义,因为
Writer
接口的方法意味着底层对象的可变性。即使在这个特定的例子中,它不完全有意义,(内部)一致性本身通常是一个参数,您已经展示了一个例子,并从中推断出“go标准库始终倾向于指针接收器”。标准库通常适当地使用指针和值;例如,在中,根据需要使用某些类型的值和其他类型的指针;同样的,只举两个例子。在这种情况下,我认为使用指针接收器更有意义,因为
Writer
接口的方法意味着底层对象的可变性。即使在这个特定的例子中,它不完全有意义,(内部)一致性本身通常是一个参数,您已经展示了一个例子,并从中推断出“go标准库始终倾向于指针接收器”。标准库通常适当地使用指针和值;例如,在中,根据需要使用某些类型的值和其他类型的指针;同样的,只举两个例子。