ホームページ > バックエンド開発 > Golang > Go でエクスポートされたパッケージ タイプを実行時に検出するにはどうすればよいですか?

Go でエクスポートされたパッケージ タイプを実行時に検出するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-16 18:46:11
オリジナル
808 人が閲覧しました

How Can I Discover Exported Package Types at Runtime in Go?

実行時のパッケージ タイプの公開: 方法論的探索

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート