パッケージ内でエクスポートされた型を検出する
Go プロジェクト内の複数のパッケージ間でコラボレーションする場合、多くの場合、エクスポートされた型にアクセスして利用することが必要になります。他のパッケージから。この記事では、パッケージ内で定義されているすべての型を取得するための 2 つの効果的な手法を検討し、開発者が外部型を独自のコードベースにシームレスに統合できるようにします。
1. go/importer の利用
go/importer パッケージは、パッケージをインポートしてその内容をイントロスペクトするための簡単なメカニズムを提供します。これは、パッケージが正常にインポートされると Package オブジェクトを返す Import 関数を通じて実現できます。返された 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. Reflection
Reflection は、実行時に型を検査する動的なアプローチを提供します。 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 中国語 Web サイトの他の関連記事を参照してください。