1
的Golang language specification states:方法設置T和* T
任何其他類型T的方法集包括與接收器類型
T
的所有方法。相應指針類型*T
的方法集合是具有接收器*T
或T
(也包含方法集合T
)的所有方法的集合。
這是爲什麼?爲什麼接收T
的方法屬於爲*T
設置的方法,但反之亦然?
的Golang language specification states:方法設置T和* T
任何其他類型T的方法集包括與接收器類型
T
的所有方法。相應指針類型*T
的方法集合是具有接收器*T
或T
(也包含方法集合T
)的所有方法的集合。
這是爲什麼?爲什麼接收T
的方法屬於爲*T
設置的方法,但反之亦然?
從FAQ:
如果接口值包含一個指針* T,方法調用可以通過解引用指針獲得的值,但如果接口值包含一個值T,就沒有有用方法調用獲取指針的方式。
順便說一句,指針接收器的方法可以改變它的接收器,就像它可以改變指針參數一樣。將非指針接收器作爲指針傳遞(假設這是可能的),允許該方法更改它,而不應該這樣做。
建議對一種類型的所有方法使用一個一致的接收器類型,並避免混合指針和直接接收器。還建議使用大型指針接收器。
優秀的權威答案。乾杯。 –