2 回答

TA貢獻1842條經(jīng)驗 獲得超13個贊
游覽建議的區(qū)別實際上并不在于更改v := &Vertex{3, 4}
為v:= Vertex{3, 4}
,而是更改了兩種方法的定義,以便它們處理值而不是指針。因此,例如,對于Scale
,func (v *Vertex) Scale(f float64) {...
變?yōu)?code>func (v Vertex) Scale(f float64) {...(注意(v *Vertex)
,指針值變?yōu)?code>(v Vertex),非指針值)。在這兩種情況下,您都應(yīng)該保留v
as的聲明v := &Vertex{3, 4}
。
您會注意到,在第一種情況下,當(dāng)方法采用指針時,輸出為&{15 20} 25
. 但是,當(dāng)這些方法采用值而不是指針時,輸出為&{3 4} 5
。
在這兩種情況下,v
都是指向Vertex
對象的指針。在第一種情況下,指針被傳遞給方法,一切都按預(yù)期進行 - 對Vertex
對象所做的任何修改都會對原始值進行,因此這些更改在方法返回后仍然存在。在第二種情況下,雖然v
仍然是一個指針,但 Go 編譯器足夠聰明,可以轉(zhuǎn)換v.Scale(5)
為(*v).Scale(5)
, wherev
被取消引用,并將結(jié)果值傳遞給Scale
。
- 2 回答
- 0 關(guān)注
- 255 瀏覽
添加回答
舉報