如果你想象我有以下声明:type Car struct { Vehicle engineType string}type Bus struct { Vehicle public bool engineType string}type Bike struct { Vehicle motorbike bool}type Vehicle struct { NumberWheels int NumberPassengers int Owner string}type Vehicles []Vehicle我正在尝试拥有一系列车辆。然而,这是不可能的,因为他们每个人都有不同的类型(即Car,Bus,Bike,等...)var myCar = Car{Vehicle{4, 4, "Me"}, "Manual"}var myBike = Bike{Vehicle{2, 0, "Bob and I"}, false}var myVehicles = Vehicles{myCar, myBike}for i := range myVehicles { fmt.Println(myVehicles[i])}你将如何实现这样的事情。还是我试图从错误的角度解决这个问题。我是 Go 的新手
1 回答
侃侃尔雅
TA贡献1801条经验 获得超15个赞
Vehicle
被嵌入Car
和Bus
,所以你得到的东西在错误的方向前进......这不像Vehicle
是一个父类,所以你不能得到你正在寻找出这个设计的多态行为。你需要的是一个接口。
为了向您展示一个工作示例,我将使用空接口(它将允许您在集合中存储任何类型)。对于您的实际程序,您可能想要制作类似IVehicle
界面的东西,并在其上放置所有车辆将拥有的任何通用方法,可能是类似的东西Start()
或其他任何东西......
https://play.golang.org/p/iPJbFYlo7o
稍微扩展一下嵌入的东西......这不是继承。你可以用它完成同样的事情,但是“汽车是一种交通工具”这句话是不正确的。这实际上更像是“Car has a Vehicle”的组合。只是它Vehicle
的字段和方法被“提升”了Car
,这意味着它们可以从 的实例中访问,Car
而无需像Car.Vehicle.FieldOnVehicle
. 那不是你真正要找的。如果你想说“Car is a Vehicle”并且它是真的,那么Vehicle
需要是一个Car
实现的接口。
- 1 回答
- 0 关注
- 151 浏览
添加回答
举报
0/150
提交
取消