在 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中文網其他相關文章!