首页 > 后端开发 > Golang > 如何从字符串实例化 Go 中的新类型?

如何从字符串实例化 Go 中的新类型?

Patricia Arquette
发布: 2024-12-31 20:19:11
原创
448 人浏览过

How Can I Instantiate a New Type in Go from a String?

实例新类型(Golang)

在 Go 中,从字符串创建类型的新实例并不是一项简单的任务。 Go 的静态类型和死代码消除机制使得基于存储为字符串的类型名称动态创建对象变得困难。

要解决此限制,一种方法是维护全局 map[string]reflect.Type。该映射可以填充在定义可发现类型的包的 init() 函数中。通过使用这个映射,您可以查找所需类型的reflect.Type,并使用reflect.New来获取指向该类型的新对象的指针。

type MyStruct struct {
    // ...
}

func init() {
    register("MyStruct", reflect.TypeOf(MyStruct{}))
}
登录后复制

注册后,您可以创建一个使用反射的新实例:

newObject := reflect.New(registered["MyStruct"]).Elem().Interface()
myStruct := newObject.(MyStruct)
登录后复制

但是,重要的是要考虑反射会带来性能开销并增加代码的复杂性。探索替代方法可能更合适,例如:

  • 工厂方法:通过返回特定类型实例的预定义工厂函数创建对象。
  • 动态编程:使用接口和一个运行时注册表,用于根据字符串中存储的类型名称处理对象创建。

以上是如何从字符串实例化 Go 中的新类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板