问题内容 我正在使用 Go,并且有一个工厂函数,它根据请求的标识符返回不同类型的对象: func newobject(id string) interface{} { swit
我正在使用 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
}
如您所见,卡车和汽车没有任何共同点。问题的产生是因为我现在在调用 newobject(..)
时必须处理过于宽泛的类型 interface{}
。我知道有泛型,但这需要在类型约束中保留所有受支持类型的列表,这会使我的代码库中的事情变得复杂。
基本上我正在寻找一种如何在这里使用继承的方法,go 当然不支持。另一种选择是什么?
newobject(..)
函数可以在泛型的支持下实现。您不需要在类型约束中保留所有支持类型的列表。
func NewObject[T any](id string) T {
var vehicle any
switch id {
case "truck":
vehicle = Truck{
Foo: "foo",
}
case "car":
vehicle = Car{
Bar: "bar",
}
}
if val, ok := vehicle.(T); ok {
return val
}
var otherVehicle T
fmt.Printf("Not implemented. Returning with default values for \"%v\"\n", id)
return otherVehicle
}
您可以在此处查看完整示例。
以上就是如何限制特定类型的接口{}的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: 如何限制特定类型的接口{}
本文链接: https://www.lsjlt.com/news/561186.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0