1
2
3
4
5
6
7
8
9
10
11
12
13
14
type Person interface {
Say()
}


type A struct{}
type B struct{}


func (x A) Say(){}
func (x *B) Say(){}


func Test(x Person) {}

在这里,A 和B 都实现了Person 接口,但是实际上你可以理解为。结构体方法也是有一个隐含参数的。其中 A 的 Say方法里就隐含了一个形参 A,B则是隐含了B的指针。

也就是说,其实 A 实现了 person 接口,但是对于 B 是 B 的指针实现了这个接口。

于是对于 Test 方法,可以传入 A和*A,但是对只能传入 *B,因为 B 是没有实现这个接口的。