type T struct {}
func (*T) foo(){
fmt.Println("foo,")
}
func (T) bar() {
}
type S struct {
*T
}
s := S{}
_ = s.T.foo
s.T.foo()
var t *T
t.foo()
_ = s.bar
s.bar將被展開為(s.T).bar,而 s.T 是個(gè)空指針前翎,解引用會(huì) panic廊营。而s.foo沒有panic是因?yàn)?/em>T的方法集有foo()哼凯,而沒有bar()
方法集規(guī)則如下:
Values Methods Receivers
T (t T) *T (t T) and (t *T)
Methods Receivers Values
(t T) T and *T (t *T) *T
因?yàn)椴皇强偰塬@取一個(gè)值的地址锌妻,所以值的方法集只包括了使用值接收者實(shí)現(xiàn)的方法