在文檔effective Go它指出:爲什麼沒有爲命名指針類型定義方法?
隨着我們ByteSize看到的,方法可以爲任何命名類型 (除了指針定義...
它接着以提供一個指針作爲接收器的例子:
func (p *ByteSlice) Append(data []byte) {
slice := *p
// Body as above, without the return.
*p = slice
}
是不是這樣相反ct?或者這是否意味着這是無效的:
type ByteSlice []byte
type Pb *ByteSlice
func (p Pb) Append(data []byte) []byte {
}
雖然它看起來就像一個typedef!
我們正在猜測語言中沒有的東西的語義,但是如果從* I到* P的轉換自動發生(因此您的代碼段是明確的),這將是非常令人驚訝的。如果'P'被定義爲'type P I',那麼'I(0).Get()'已經是明確的了,我不明白爲什麼添加指針會產生任何影響。 –
我已經去了P.Get – Sridhar
@PaulHankin:是的,那不是我所希望的那麼清楚。爲了強調自動類型轉換問題,我稍微擴展了它。請注意,沒有明確的原因,它*無法被定義,但是因爲它不能解決真正的問題,並且只會使代碼不那麼清晰,所以它永遠不會作爲值得添加到語言中的功能傳遞。 – JimB