在 Golang 中,您可能会遇到需要根据存储为字符串的名称创建类型的新实例的情况。虽然这在旧版本的 Go 中曾经是可能的,但它不再简单了。
Go 是一种静态类型语言,这意味着编译器在以下位置验证并强制执行数据类型:编译时间。这确保了类型安全,但也意味着不直接支持从字符串类型名称创建新实例。
要实现此目的,您可以考虑使用反射,它提供了一种方法在运行时检查和操作对象。然而,反射可能很复杂并会带来性能损失。
使用反射的一种方法是维护全局映射[string]reflect.Type。这个映射可以在相关包的 init() 函数中初始化,确保编译器在可执行文件中包含必要的类型。
然后你可以使用这个映射来查找所需类型的reflect.Type并使用reflect.New创建一个新实例。要将对象提取到接口中,请使用reflect.New(yourtype).Elem().Interface()。
或者,考虑探索更好的程序结构,以避免需要反思。例如,利用工厂方法或维护具有不同类型创建函数的 map[string]func() 接口{}可能会提供更简单、更高效的解决方案。
以上是如何从字符串实例化 Go 类型?的详细内容。更多信息请关注PHP中文网其他相关文章!