動態查找導出的包類型
與反射包中有限的類型發現功能相比,本文探討了發現所有導出包類型的替代方法運行時的套件類型(特別是結構體)。
使用類型和importer(Go 1.5 及更高版本)
在Go 1.5 及後續版本中,類型和導入器包引入了一種強大的檢查包的方法。以下是如何使用它們:
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) } }
使用ast(Go 的早期版本)
在1.5 版本之前,ast 套件可用於解析和檢查原始程式碼以進行類型發現。然而,這種方法比較複雜,可能需要額外的解析程式碼。
範例用例
這種類型發現功能可以在各種場景中使用。例如,在程式碼產生實用程式中,它可以識別嵌入指定類型的類型。這允許基於發現的類型建立測試函數,而不需要手動重新產生步驟。
結論
儘管反射包中缺乏本機類型發現,Go 提供了在運行時檢查包類型的替代方法。這允許更靈活的類型自省,並且可以在各種應用程式中使用,包括程式碼生成和測試框架。
以上是Go中如何動態發現導出的套件類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!