我正在使用Go语言,我有一个工厂函数,它根据请求的标识符返回不同类型的对象:
func NewObject(id string) interface{} {
switch id {
case "truck":
return Truck{}
case "car":
return Car{}
....
}
}
以下是相应的结构类型:
type Truck struct {
Foo string
}
type Car struct {
Bar string
}
正如你所看到的,Truck和Car没有任何共同之处。问题的根源在于,当调用NewObject(..)
时,我现在必须处理太宽的类型interface{}
。我知道有泛型,但这需要在类型约束中保留所有支持的类型的列表,这会使代码库中的事情变得复杂。
基本上,我在这里寻找一种方法来使用继承,当然Go语言不支持继承。有什么替代方法吗?
2条答案
按热度按时间mi7gmzs61#
NewObject(..)
函数可以在泛型的支持下实现,不需要在类型约束中列出所有支持的类型。您可以看到完整的示例here。
j0pj023g2#
我有个奇怪的例子
此示例将返回
construct of struct
希望这能激励你