実行時のパッケージ タイプの公開: 方法論的探索
reflect パッケージは包括的なイントロスペクション機能を提供しますが、ターゲット タイプについての事前の知識が必要ですまたは価値。これにより、実行中のパッケージ内でエクスポートされたすべての型、特に構造体を検出することが困難になります。
しかし、Go 1.5 の出現により、新しいパラダイムが出現しました。
タイプとインポーター パッケージ
Go 1.5 以降では、タイプとインポーター パッケージが提供しますバイナリおよびソース パッケージを検査するための強力なメカニズム:
package main 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) } }
インポートされたパッケージの Scope() を反復処理することで、型名を含むエクスポートされたすべての識別子のリストを取得できます。これにより、パッケージの公開タイプの包括的なビューが提供されます。
1.5 より前のソリューション: ast パッケージの活用
Go 1.5 より前では、ast を使用する唯一の信頼できるアプローチパッケージを使用してソース コードをコンパイルし、必要な情報を抽出します。これはより複雑で、エラーが発生しやすい方法です。
カスタム タイプ検出へのアプリケーション
実行時にパッケージ タイプを検出する機能は、次のようなシナリオで特に役立ちます。あなたが説明したもの:指定された型を埋め込む構造体の識別とインスタンス化。上記の方法を活用することで、このプロセスを自動化し、手動による更新や登録機能の必要性を排除できます。
以上がGo でエクスポートされたパッケージ タイプを実行時に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。