通过反射从 Go 中的名称获取类型表示
问题:
如何使用 Go 的反射从其名称获取类型表示图书馆?
答案:
理解这个问题取决于它的解释。本质上有两个观点:
运行时不可访问性:
如果类型的名称在运行时作为字符串提供,则无法将其转换为类型表示形式。未显式引用的类型可能不会包含在最终的可执行二进制文件中,从而使它们在运行时无法访问。
“编码”时可访问性:
但是,在编码(源代码创建或生成),无需创建指定类型的变量并调用即可实现此目的Reflect.TypeOf().
获取嵌入类型:
可以使用类型化的nil指针值并从指针的reflect.Type描述符遍历到使用指针的基本或元素类型Type.Elem().
示例:
t := reflect.TypeOf((*YourType)(nil)).Elem()
此方法生成与通过创建变量获得的描述符 (t2) 相同的类型描述符 (t)类型和使用Reflect.TypeOf():
var x YourType t2 := reflect.TypeOf(x) fmt.Println(t, t2) fmt.Println(t == t2)
输出:
main.YourType main.YourType true
结论:
检索类型时由于编译限制,表示在运行时不可行,可以在编码期间通过使用访问嵌入类型输入 nil 指针方法。
以上是如何在编译时从名称中获取 Go 类型表示?的详细内容。更多信息请关注PHP中文网其他相关文章!