type A ... func (a A)X(){} func (a *A)Y(){} type IX interface{ X() } type IY interface{ Y() } a := A{} b := &a c := &b a.X() // ok b.X() // ok c.X() // error a.Y() // ok b.Y() // ok c.Y() // ok var ix IX ix = a // ok ix = b // ok ix = c // error var iy IY iy = a // error iy = b // ok iy = c // error var jx IX jx = ix // ok jx = &ix // error
對於代碼: 函數
type I interface { IE() } type A int func (_ 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() {}
下面的列表說明了其方法集和方法的來源: spa
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 |