gpt4 book ai didi

go - 实例新类型(Golang)

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

谁能告诉我如何从字符串创建一个新的 Type 实例?反射(reflection)?

有一些示例,但它们适用于语言的较旧版本(Go 1 之前的版本)[:(]

最佳答案

因此,如果我对您的问题的理解正确,那么您是在询问当您仅将类型名称作为字符串时如何创建对象。因此,例如,您可能有一个字符串“MyStruct”并且您想要创建一个这种类型的对象。

不幸的是,这并不容易实现,因为 Go 是一种静态类型语言,链接器将消除死代码(或内联部分代码)。因此,无法保证您的最终可执行文件甚至会包含“MyStruct”的代码。

但是,您可以手动维护全局 map[string]reflect.Type。例如,通过在定义此类可发现类型的包的 init() 函数中初始化此映射。这也会告诉编译器您正在使用这些类型。之后,您可以使用此 map 查找 reflect.Type您要创建和使用的类型 reflect.New获取指向该类型新对象的指针(存储为 reflect.Value)。您可以使用如下方式将对象提取到接口(interface)中:

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

Elem()将取消引用指针和 Interface()将以接口(interface){}的形式返回反射值。参见 The Laws of Reflection了解更多详情。

PS:可能有更好的方法来构建您的程序,它甚至不需要反射,并且让编译器捕获更多错误。您是否考虑过使用 factory method例如?另一个简单的解决方案可能是维护函数的 map[string]func() 接口(interface){},调用这些函数可以创建具有该名称的新对象。

关于go - 实例新类型(Golang),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32099195/

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