發現包內的匯出類型
在Go 專案中跨多個套件進行協作時,通常需要存取和利用導出的類型來自其他包。本文探討了兩種取得包內所有定義類型的有效技術,使開發人員能夠將外部類型無縫整合到自己的程式碼庫中。
1.利用 go/importer
go/importer 套件提供了一種簡單的機制來導入包併內省其內容。這可以透過 Import 函數來實現,一旦成功導入包,函數就會傳回 Package 物件。傳回的 Package 物件包含大量訊息,包括宣告的識別碼的範圍。透過迭代 Scope 的 Names 方法,可以獲得套件內所有導出類型的名稱。
範例:
package demo type People struct { Name string Age uint } type UserInfo struct { Address string Hobby []string NickNage string }
// In a separate package 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) } }
2.反射
反射提供了一種在運行時檢查類型的動態方法。透過使用 TypeOf 函數,您可以獲得任何值的類型信息,包括其名稱和底層結構。
範例:
package demo type People struct { Name string Age uint } type UserInfo struct { Address string Hobby []string NickNage string }
// In a separate package import ( "fmt" "reflect" ) func main() { peopleType := reflect.TypeOf(People{}) fmt.Println(peopleType.Name()) // Prints "People" userInfoType := reflect.TypeOf(UserInfo{}) fmt.Println(userInfoType.Name()) // Prints "UserInfo" }
以上是如何發現Go包中所有導出的類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!