当前位置: > > > > 如何通过反射从名称获取类型表示?
来源:stackoverflow
2024-04-24 15:24:35
0浏览
收藏
学习知识要善于思考,思考,再思考!今天小编就给大家带来《如何通过反射从名称获取类型表示?》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!
问题内容
有没有办法使用 Go 中的反射库从类型名称转到其类型表示?
我有一个库,用户需要为某些代码生成提供类型表示。我知道这一定是可能的(在某种意义上),因为他们可以创建该类型的变量并调用 TypeOf 函数,但是有没有办法绕过这个并只从名称中获取表示形式?
解决方案
这个问题不太明确,可以用两种方式解释,其中一种答案是否定的,不可能;另一个答案是肯定的,这是可能的。
运行时
如果类型名称作为 string
值提供,那么在运行时这是不可能的,因为未显式引用的类型可能无法编译到最终的可执行二进制文件中(因此显然在运行时变得无法访问,“未知”) 。有关详细信息,请参阅 。有关可能的解决方法,请参阅 。
在“编码”时
如果我们谈论“编码”时间(源代码编写/生成),那么无需创建/分配给定类型的变量并调用 并传递变量也是可能的。
您可以从指向类型的指针开始,并使用类型化的nil
指针值而不进行分配,并且您可以从其描述符导航到该类型的描述符使用 type.elem()
的指针的基类型(或元素类型)。
它是这样的:
t := reflect.typeof((*yourtype)(nil)).elem()
上面的类型描述符 t
与下面的 t2
相同:
var x yourtype t2 := reflect.typeof(x) fmt.println(t, t2) fmt.println(t == t2)
上述应用程序的输出(在 上尝试一下):
main.YourType main.YourType true
今天关于《如何通过反射从名称获取类型表示?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注公众号!