登录
首页 >  Golang >  Go问答

如何通过反射从名称获取类型表示?

来源:stackoverflow

时间:2024-04-24 15:24:35 469浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《如何通过反射从名称获取类型表示?》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

有没有办法使用 Go 中的反射库从类型名称转到其类型表示?

我有一个库,用户需要为某些代码生成提供类型表示。我知道这一定是可能的(在某种意义上),因为他们可以创建该类型的变量并调用 TypeOf 函数,但是有没有办法绕过这个并只从名称中获取表示形式?


解决方案


这个问题不太明确,可以用两种方式解释,其中一种答案是否定的,不可能;另一个答案是肯定的,这是可能的。

运行时

如果类型名称作为 string 值提供,那么在运行时这是不可能的,因为未显式引用的类型可能无法编译到最终的可执行二进制文件中(因此显然在运行时变得无法访问,“未知”) 。有关详细信息,请参阅 Splitting client/server code。有关可能的解决方法,请参阅 Call all functions with special prefix or suffix in Golang

在“编码”时

如果我们谈论“编码”时间(源代码编写/生成),那么无需创建/分配给定类型的变量并调用 reflect.TypeOf() 并传递变量也是可能的。

您可以从指向类型的指针开始,并使用类型化的nil指针值而不进行分配,并且您可以从其reflect.Type描述符导航到该类型的描述符使用 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)

上述应用程序的输出(在 Go Playground 上尝试一下):

main.YourType main.YourType
true

今天关于《如何通过反射从名称获取类型表示?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>