Go では、型をパッケージからエクスポートして、他のパッケージからアクセスできるようにすることができます。場合によっては、パッケージを直接インポートせずに、これらのエクスポートされた型に関する情報にアクセスする必要がある場合があります。この記事では、go/importer パッケージを使用して、特定のパッケージからエクスポートされたすべての定義済みタイプを取得する方法について説明します。
質問:
次のデモ パッケージを考えてみましょう:
package demo type People struct { Name string Age uint } type UserInfo struct { Address string Hobby []string NickNage string }
別のパッケージで、デモからエクスポートされたすべての型を取得するにはどうすればよいですかpackage?
答え:
これを実現するには、パッケージをインポートしてその内容をイントロスペクトするための API を提供する go/importer パッケージを使用できます。その方法は次のとおりです:
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 パッケージをインポートせずに、エクスポートされたすべての型を Go パッケージから取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。