使用运行时包发现来确定包类型
反射包中缺乏类型发现机制,需要采用替代方法来发现导出的包正在运行的 Go 包中的类型,特别是结构。
解决方案在 Go 1.5 及更高版本中:
利用 Go 1.5 中引入的类型和导入器包,可以检查二进制包和源包。考虑以下示例:
package main import ( "fmt" "go/importer" ) func main() { pkg, err := importer.Default().Import("time") if err != nil { fmt.Printf("error: %s\n", err.Error()) return } for _, declName := range pkg.Scope().Names() { fmt.Println(declName) } }
此代码展示了使用导入程序包探索“time”包中导出的名称。
Pre-Go 1.5 方法:
在 Go 1.5 之前,唯一可行的解决方案是使用 ast 包来编译源代码。然而,这种方法带来了额外的复杂性。
以上是如何在运行的 Go 包中发现导出的类型?的详细内容。更多信息请关注PHP中文网其他相关文章!