2012-05-20 44 views
1

Golang language specification states方法設置T和* T

任何其他類型T的方法集包括與接收器類型T的所有方法。相應指針類型*T的方法集合是具有接收器*TT(也包含方法集合T)的所有方法的集合。

這是爲什麼?爲什麼接收T的方法屬於爲*T設置的方法,但反之亦然?

回答

6

FAQ

如果接口值包含一個指針* T,方法調用可以通過解引用指針獲得的值,但如果接口值包含一個值T,就沒有有用方法調用獲取指針的方式。

順便說一句,指針接收器的方法可以改變它的接收器,就像它可以改變指針參數一樣。將非指針接收器作爲指針傳遞(假設這是可能的),允許該方法更改它,而不應該這樣做。

建議對一種類型的所有方法使用一個一致的接收器類型,並避免混合指針和直接接收器。還建議使用大型指針接收器。

+0

優秀的權威答案。乾杯。 –