简单method规则
type Cat struct{
Name string
Color string
}
func (c Cat) Meow() {
fmt.Println("Name:", c.Name, "Color:", c.Color)
}
在上面的代码上, 声明了一个method, 它的receiver是Cat(区别于Cat的指针),在这时,无论是通过 Cat类型的变量来调用method还是用 *Cat的类型来调用,Go都会正常的编译并正常输出。
普通情况下,类型 T 和 *T 上的方法集是互相继承的。
接口中methods set的规则
此时并没有问题,也就是说如果给Cat类型实现Meower的接口上Meow的方法,无论是Cat还是Cat都是可以成为接口调用的。
此时会编译不通过
在接口中的method,对于普通类型T:
T的methods set里不会继承包含T实现的method,除非T自己实现相对应的method。
但是,*T会继承T的method set。