如果您认为我有以下声明:
function replace_code($code){
foreach($_POST as $name => $value){
$code = str_replace($name, htmlentities($value), $code);
}
return htmlentities($code);
}
我正在尝试拥有一系列车辆。然而,这是不可能的,因为它们各自具有不同的类型(即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
你将如何实现这样的目标。或者我是否试图从错误的角度解决这个问题。我是Go的新手。
答案 0 :(得分:2)
Vehicle
嵌入在Car
和Bus
中,因此您的行为方向错误......它不像Vehicle
是父类因此,您无法获得您在此设计中寻找的多态行为。你需要的是一个界面。
为了向您展示一个工作示例,我将使用空接口(它允许您在集合中存储任何类型)。对于你的实际程序,你可能想要制作类似于IVehicle
界面的东西,并放置所有车辆将拥有的常用方法,可能类似于Start()
或其他......
https://play.golang.org/p/iPJbFYlo7o
稍微扩展一下嵌入的东西......这不是继承。你可以用它完成同样的事情,但声明" Car 是 Vehicle"不是真的。这实际上更像是构图," Car有一辆车"。只是Vehicle
的字段和方法被提升了#39;最多Car
,这意味着可以从Car
的实例访问它们,而不需要Car.Vehicle.FieldOnVehicle
这样的另一个间接层。那不是你真正想要的。如果你想说"汽车是一辆车"确实如此,Vehicle
需要成为Car
实现的接口。