gpt4 book ai didi

go - 我如何将类型存储在 go maps 中以供以后初始化

转载 作者:IT王子 更新时间:2023-10-29 02:05:21 24 4
gpt4 key购买 nike

我正在尝试实现一个工厂函数,该函数将返回满足接口(interface) X 协定的众多结构之一的实例。

m := make(map[string] ?)
func init () {
m["a"] = ?
m["b"] = ?
}

type X interface {
y()
}

type A struct {}
func (a * A) y () {}

type B struct {}
func (b * B) y () {}


function factory(name string) X {
return &m[name]{}
}

上面的代码只是我试图实现的一个简化演示 - 寻找这是否可能的指针,或者是否有不同的 go 习语来解决我缺少的这种需求。

最佳答案

您可以使用 map[string]X,X 是接口(interface)(它可以引用一个值或任何遵守 X 协定的对象的指针)

or if there is a different go idiom to solve this kind of requirement that I'm missing?

您还可以使用反射(如“Instance new Type”)来实现您的工厂。

reflect.New(yourtype).Elem().Interface()

您可以在“is there a way to create an instance of a struct from a string?”中看到一个工厂示例。


工厂方法(每次返回一个新实例)的更快方法是使用开关(如 in this example ):

// Create a new Widget interface based on WidgetType and set WidgetInfo
func New(wt WidgetType, wi WidgetInfo) Widget_iface {
switch wt {
case Widget_A:
return newWidgetA(wi)
case Widget_B:
return newWidgetB(wi)
}
return nil
}

关于go - 我如何将类型存储在 go maps 中以供以后初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30098611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com