gpt4 book ai didi

go - 有没有办法从字符串创建结构的实例?

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:14 26 4
gpt4 key购买 nike

给定一个结构:

type MyStruct struct {
A int
B int
}

和一个带有结构名称的字符串

a := "MyStruct"

a := "mypkg.MyStruct"

如何从字符串名称而不是结构体创建我的结构体实例?我的想法是,我将创建一个应用程序,其中所有结构都链接到二进制文件中,但从字符串创建运行时实例。 (有点元元)

最佳答案

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()
}

关于go - 有没有办法从字符串创建结构的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23486774/

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