作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试实现一个工厂函数,该函数将返回满足接口(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/
我是一名优秀的程序员,十分优秀!