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++中的繼承。