具有相同匿名字段但不同类型的Go结构数组

时间:2015-11-20 20:55:33

标签: arrays data-structures struct go

如果您认为我有以下声明:

function replace_code($code){
 foreach($_POST as $name => $value){
  $code = str_replace($name, htmlentities($value), $code);
 }

return htmlentities($code);
}

Playground

我正在尝试拥有一系列车辆。然而,这是不可能的,因为它们各自具有不同的类型(即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 CarBus等......)

Bike

Playground

你将如何实现这样的目标。或者我是否试图从错误的角度解决这个问题。我是Go的新手。

1 个答案:

答案 0 :(得分:2)

Vehicle嵌入在CarBus中,因此您的行为方向错误......它不像Vehicle是父类因此,您无法获得您在此设计中寻找的多态行为。你需要的是一个界面。

为了向您展示一个工作示例,我将使用空接口(它允许您在集合中存储任何类型)。对于你的实际程序,你可能想要制作类似于IVehicle界面的东西,并放置所有车辆将拥有的常用方法,可能类似于Start()或其他......

https://play.golang.org/p/iPJbFYlo7o

稍微扩展一下嵌入的东西......这不是继承。你可以用它完成同样的事情,但声明" Car Vehicle"不是真的。这实际上更像是构图," Car有一辆车"。只是Vehicle的字段和方法被提升了#39;最多Car,这意味着可以从Car的实例访问它们,而不需要Car.Vehicle.FieldOnVehicle这样的另一个间接层。那不是你真正想要的。如果你想说"汽车是一辆车"确实如此,Vehicle需要成为Car实现的接口。