匿名嵌入方法集
- 嵌入S,T += receiver S。
- 嵌入*S,T += receiver (S + *S)。
- 嵌入S或*S, *T += receiver (S + *S)。
匿名嵌入字段时基本规则大概这样。如果在一个类型里嵌入S
,那么T
的方法集包含S
。如果嵌入*S
那么包含全部。不管S还是*S
,以*T
的方式获取方法集的时候包含全部。所以用指针方式获取方法集时等于全部,当用T
方式获取时,分嵌入S
还是*S
。不管一级还是两级都严格区分T
和*T
。
匿名嵌入字段方法集
type S int
type X struct {
S
}
func (S) A() {}
func (*S) B() {}
func main() {
var o X
t := reflect.TypeOf(o)
// t := reflect.TypeOf(&o)
for i := 0; i < t.NumMethod(); i++ {
fmt.Println(t.Method(i).Name)
}
}