![](/img/trans.png)
[英]Why can't methods with pointer and non-pointer receivers have the same name in Go?
[英]Why does go standard library prefer pointer receivers?
Go 標准庫是否有理由更喜歡指針接收器,即使值接收器可以工作?
type multiWriter struct {
writers []Writer
}
func (t *multiWriter) Write(p []byte) (n int, err error) {
...
}
...
func MultiWriter(writers ...Writer) Writer {
...
return &multiWriter{allWriters}
}
即使&multiWriter{allWriters}
返回multiWriter
值,並且func (t *multiWriter) Write
有一個值接收器,這也可以工作。
go 標准庫始終偏愛指針接收器是否有原因?
multiWriter
的方法確實可以跳過指針接收器,但是由於MultiWriter
返回一個接口,並且 Go 中的接口只包含一個類型和一個指向數據的指針,所以無論如何您都需要單獨分配一個結構。
這里有一個有趣的點,據我所知,這是一個實現細節,而不是規范的一部分。 可以想象另一種 Go 實現,它在 memory 中使用不同的接口表示,可能允許小型結構直接適合沒有指針的接口值。
為什么 go 標准庫一直更喜歡指針接收器有什么原因嗎
不。
有時是出於兼容性原因(例如,因為第一個版本不適用於值接收器)。 有時是出於一致性的原因。 有時是作者偏好。 在這里沒有太多可看或學到的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.