type A ...func (a A)X(){}func (a *A)Y(){}type IX interface{ X()}type IY interface{ Y()}a := A{}b := &ac := &ba.X() // okb.X() // okc.X() // errora.Y() // okb.Y() // okc.Y() // okvar ix IXix = a // okix = b // okix = c // errorvar iy IYiy = a // erroriy = b // okiy = c // errorvar jx IXjx = ix // okjx = &ix // error
对于代码:
type I interface { IE()}type A intfunc (_ A) VA() {}func (_ *A) PA() {}type B struct { I}func (_ B) VB() {}func (_ *B) PB() {}type C struct { A}func (_ C) VC() {}func (_ *C) PC() {}type D struct { *A}func (_ D) VD() {}func (_ *D) PD() {}
下面的列表说明了其方法集和方法的来源:
type(类型) | explicit(显式定义的方法) | implicit(隐式实现的方法) | inherit(继承自匿名字段的方法) |
I | IE | ||
*I | |||
A | VA | ||
*A | PA | VA | |
B | VB | IE | |
*B | PB | VB | IE |
C | VC | VA | |
*C | PC | VC | PA,VA |
D | VD | PA,VA | |
*D | PD | VD | PA,VA |