Go没有传统意义上的继承,而是通过组合实现代码复用。
举例说明:
首先定义一个引擎:
Go
// 引擎
type Engine struct {
Power int // 马力
FuelType string // 燃油类型
}
func (e *Engine) Start() {
fmt.Printf("%d马力 %s 引擎启动\n", e.Power, e.FuelType)
}
func (e *Engine) Stop() {
fmt.Println("引擎关闭")
}
其次,定义一个汽车:
// 汽车(组合引擎)
type Car struct {
Brand string
Color string
Engine // 嵌入 Engine,汽车"拥有"一个引擎
}
func (c *Car) Drive() {
fmt.Printf("%s %s 颜色的汽车正在行驶\n", c.Brand, c.Color)
c.Engine.Start() // 调用嵌入引擎的方法
}
func main() {
car := Car{
Brand: "比亚迪",
Color: "红色",
Engine: Engine{
Power: 200,
FuelType: "电动",
},
}
car.Drive() // 输出:比亚迪 红色 颜色的汽车正在行驶
car.Engine.Start() // 输出:200马力 电动 引擎启动
car.Stop() // 引擎直接暴露,可以直接调用
}