Go中没有类型的中央注册表,因此在一般情况下您无法提出要求。
您可以使用从字符串到
reflect.Type对应于每种类型的值的映射来手动建立自己的注册表来支持这种功能。例如:
var typeRegistry = make(map[string]reflect.Type)func init() { myTypes := []interface{}{MyString{}} for _, v := range myTypes { // typeRegistry["MyString"] = reflect.TypeOf(MyString{}) typeRegistry[fmt.Sprintf("%T", v)] = reflect.TypeOf(v) }}
然后,您可以创建如下类型的实例:
func makeInstance(name string) interface{} { v := reflect.New(typeRegistry[name]).Elem() // Maybe fill in fields here if necessary return v.Interface()}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)