在运行时公开包类型:方法探索
虽然 Reflect 包提供了全面的内省功能,但它需要先了解目标类型或值。这对在正在运行的包中发现所有导出类型(特别是结构体)提出了挑战。
但是,随着 Go 1.5 的出现,出现了一种新的范例:
使用类型和导入器包
在 Go 1.5 及更高版本中,类型和导入器包提供了强大的机制用于检查二进制包和源包:
通过迭代导入包的 Scope(),我们可以获得所有导出标识符的列表,包括类型名称。这提供了包的公开类型的全面视图。
1.5 之前的解决方案:利用 ast 包
在 Go 1.5 之前,唯一可靠的方法涉及使用 ast打包来编译源代码并提取所需的信息。这是一种更复杂且可能容易出错的方法。
自定义类型发现的应用
在运行时发现包类型的能力在以下场景中特别有用:您描述的一个:识别和实例化嵌入指定类型的结构。通过利用上述方法,您可以自动化此过程并消除手动更新或注册功能的需要。
以上是如何在 Go 运行时发现导出的包类型?的详细内容。更多信息请关注PHP中文网其他相关文章!