go 语言中可以通过匿名field来实现继承的效果,
type T1 struct { A int } func (t T1) Log() { } func (t *T1) Print() { } type T2 struct { T1 } t2 T2{}可以通过t2.Log()直接访问T1的method,就像面向对象的继承之后一样访问,不过这里要注意的传递到Log的是T1而不是T2
所以下面的声明会出现命名冲突
struct { T // conflicts with anonymous field *T and *P.T *T // conflicts with anonymous field T and *P.T *P.T // conflicts with anonymous field T and *T }匿名field的成员field和普通的field操作一样
t2 = T2{} t2.A唯一不同的是在初始化的时候不能这样写:
t2 = T2 {A:1}