Goでは、Cat
と*Cat
は異なるタイプです。だから、なぜ彼らの名前は矛盾しますか?Goでポインターと非ポインターの受信者が同じ名前のメソッドを使用できないのはなぜですか?
type Animal interface {
GetName() string
SetName(string)
}
type Cat struct {
Name string
}
func (c *Cat) GetName() string {
return c.Name
}
func (c Cat) GetName() string {
return c.Name
}
func (c *Cat) SetName(s string) {
c.Name = s
}
Comiler応答:
方法は、再宣言:Cat.GetName
どちらの方法の両方のバージョンを持つことはちょうど愚かであるので、それはバグや実装の意図的な部分です。それは、逆参照/アドレスがある場所です。ポインタやインスタンスを持っている場合は、他のインスタンスを簡単に取得できます。 – evanmcdonnal
このインタフェースを実装する構造体を、このインタフェースを引数とする関数に渡す場合、どのメソッドが呼び出されるのか 'interface {GetName()string}'を考慮してください。 – mpm