Wol*_*ang 3 methods types pointers go
我的理解是Cat和*Cat不同类型的搜索.那为什么他们的名字会发生冲突
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
}
Run Code Online (Sandbox Code Playgroud)
漫画回复:
方法重新声明:Cat.GetName
任何其他类型的方法集
T包含用接收器类型声明的所有方法T.设置相应的指针型的方法*T是该组的与接收器声明的所有方法*T或T(即,它也包含的方法集T).
因此,如果您有一个方法Cat作为接收器类型,该方法也是方法集的一部分*Cat.因此,*Cat已经有了这种方法,试图声明具有相同名称的"另一个",并且*Cat接收器类型将是重复的.
要验证它,请参阅此示例:
type Cat struct{ Name string }
func (c Cat) GetName() string { return c.Name }
Run Code Online (Sandbox Code Playgroud)
我们只用非指针接收器声明一个方法.如果我们检查/打印相应*Cat类型的方法:
func main() {
var cp *Cat = &Cat{} // Pointer
t := reflect.TypeOf(cp)
for i := 0; i < t.NumMethod(); i++ {
fmt.Println(t.Method(i).Name)
}
}
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
GetName
Run Code Online (Sandbox Code Playgroud)
该类型*Cat已经有一个GetName方法.添加另一个*Cat接收器将与上面的一个碰撞.
官方FAQ中的相关问题:为什么Go不支持方法和运算符的重载?
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |