简单method规则

  1. type Cat struct{
  2. Name string
  3. Color string
  4. }
  5. func (c Cat) Meow() {
  6. fmt.Println("Name:", c.Name, "Color:", c.Color)
  7. }

在上面的代码上, 声明了一个method, 它的receiver是Cat(区别于Cat的指针),在这时,无论是通过 Cat类型的变量来调用method还是用 *Cat的类型来调用,Go都会正常的编译并正常输出。

golang 方法集 - 图2

golang 方法集 - 图3
普通情况下,类型 T 和 *T 上的方法集是互相继承的。

接口中methods set的规则golang 方法集 - 图4

此时并没有问题,也就是说如果给Cat类型实现Meower的接口上Meow的方法,无论是Cat还是Cat都是可以成为接口调用的。golang 方法集 - 图5
此时会编译不通过
在接口中的method,对于普通类型T:
T的methods set里不会继承包含
T实现的method,除非T自己实现相对应的method。
但是,*T会继承T的method set。