在 Go 中,经常需要动态创建新的类型实例,例如解析配置文件或处理 API 时请求。这可以通过反射来实现,但该过程在该语言的最新版本中已经演变。
不幸的是,在 Go 中,由于该语言的静态类型性质,从类型字符串创建对象并不简单。链接器会删除未使用的代码,从而无法保证运行时所需类型的可用性。
一种解决方法是维护一个全局映射,将类型名称(作为字符串)与其相应的 Reflect.Type 对象关联起来。该映射可以在定义可发现类型的包的 init() 函数中初始化。
使用该映射,您可以查找所需类型的reflect.Type 并使用reflect.New 创建一个新对象。要从反射值中提取对象,可以使用 Elem() 取消引用指针,并使用 Interface() 将反射值作为接口返回。
reflect.New(yourtype).Elem().Interface()
但是,值得考虑其他方法,例如作为工厂方法或创建函数的映射,这可能比依赖反射更高效且更不容易出错。
以上是如何从字符串动态实例化 Go 类型?的详细内容。更多信息请关注PHP中文网其他相关文章!