首页 > 后端开发 > Golang > 如何在编译时从名称中获取 Go 类型表示?

如何在编译时从名称中获取 Go 类型表示?

Susan Sarandon
发布: 2024-12-29 19:11:11
原创
1003 人浏览过

How Can I Get a Go Type Representation from Its Name at Compile Time?

通过反射从 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中文网其他相关文章!

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