簡體   English   中英

為什么 go 標准庫更喜歡指針接收器?

[英]Why does go standard library prefer pointer receivers?

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{allWriters}返回multiWriter值,並且func (t *multiWriter) Write有一個值接收器,這也可以工作。

go 標准庫始終偏愛指針接收器是否有原因?

multiWriter的方法確實可以跳過指針接收器,但是由於MultiWriter返回一個接口,並且 Go 中的接口只包含一個類型和一個指向數據的指針,所以無論如何您都需要單獨分配一個結構。

這里有一個有趣的點,據我所知,這是一個實現細節,而不是規范的一部分。 可以想象另一種 Go 實現,它在 memory 中使用不同的接口表示,可能允許小型結構直接適合沒有指針的接口值。

為什么 go 標准庫一直更喜歡指針接收器有什么原因嗎

不。

有時是出於兼容性原因(例如,因為第一個版本不適用於值接收器)。 有時是出於一致性的原因。 有時是作者偏好。 在這里沒有太多可看或學到的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM