在 Go 中,可以从包中导出类型,以便其他包可以访问它们。有时,可能需要访问有关这些导出类型的信息,而不直接导入包。本文将探讨如何使用 go/importer 包从特定包导出所有定义的类型。
问题:
考虑以下演示包:
package demo type People struct { Name string Age uint } type UserInfo struct { Address string Hobby []string NickNage string }
在另一个包中,我们如何从演示中检索所有导出的类型包?
答案:
为了实现这一点,我们可以使用 go/importer 包,它提供了一个用于导入包并内省其内容的 API。操作方法如下:
import ( "fmt" "go/importer" ) func main() { pkg, err := importer.Default().Import("demo") if err != nil { fmt.Println("error:", err) return } for _, declName := range pkg.Scope().Names() { fmt.Println(declName) } }
在这段代码中,我们首先导入演示包,然后使用 importer.Default().Import("demo") 函数获取代表演示的 *Package package.
接下来,我们迭代包的作用域的名称,其中包含该包中所有导出类型的名称。然后这些名称将打印到标准输出。
注意:在 Go Playground 中运行此代码时,您可能会遇到错误。这是因为 Go Playground 的环境无法从外部源检索包元数据。
以上是如何在不导入 Go 包的情况下检索所有导出的类型?的详细内容。更多信息请关注PHP中文网其他相关文章!