golang不支持繼承,只支持嵌入和聚合(匿名字段稱爲嵌入,具名字段稱爲聚合)。golang經過嵌入,能夠到達相似繼承的效果,並且更爲簡潔。golang
一個例子ide
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) }
運行結果spa
自定義類型中嵌入一個類型後,嵌入類型中的任何方法均可以看成該自定義結構體自身的方法被調用。例如在Derive中嵌入Base,則Base的任何數據成員和方法均可以被看成Derive自身的數據成員和方法調用。從實際做用上看,golang中的嵌入相似與C++中的繼承。blog