golang不支持继承,只支持嵌入和聚合(匿名字段称为嵌入,具名字段称为聚合)。golang通过嵌入,可以到达类似继承的效果,而且更为简洁。
一个例子
type Base struct{ b int } func (base *Base) setB(i int) { base.b = base.b + i } type Derive struct { Base // embed d int // aggregation } func (derive *Derive) setD(i int) { derive.d = derive.d + i } func main() { var d Derive fmt.Println(d.b, d.d) d.setB(5) d.setD(10) fmt.Println(d.b, d.d) }
运行结果
自定义类型中嵌入一个类型后,嵌入类型中的任何方法都可以当作该自定义结构体自身的方法被调用。例如在Derive中嵌入Base,则Base的任何数据成员和方法都可以被当作Derive自身的数据成员和方法调用。从实际作用上看,golang中的嵌入类似与C++中的继承。