首页 >后端开发 >Golang >如何限制特定类型的接口{}

如何限制特定类型的接口{}

WBOY
WBOY转载
2024-02-05 22:57:04592浏览

如何限制特定类型的接口{}

问题内容

我正在使用 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
}

您可以在此处查看完整示例。

以上是如何限制特定类型的接口{}的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除