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

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

DDD
リリース: 2025-01-05 21:04:45
オリジナル
870 人が閲覧しました

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

実行時のパッケージの検出可能性

reflect パッケージとは異なり、Go には、明示的に知らなくてもすべての型をクエリできる型検出メカニズムがありません。ここで次のような疑問が生じます:

アクティブな Go パッケージでエクスポートされたすべての型 (特に構造体) を検出する代替方法はありますか?

1 つの理論的解決策は仮説です関数「DiscoverTypes」はパッケージを受け取り、検出されたすべてのタイプを返します。ただし、この関数は、reflect パッケージ内には存在しません。

解決策の検索

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)
    }
}
ログイン後にコピー

ただし、1.5 より前のバージョンでは、唯一信頼できる方法は、ast パッケージを使用してソース コードをコンパイルすることです。

実際の使用例

この機能は、識別および特定の基準を満たすタイプをインスタンス化します。これらのユーティリティは、検出された型に基づいてテスト関数を生成するのに役立ち、手動でコードを生成する手順の必要性を減らします。

以上がGo パッケージ内のエクスポートされたすべての型を実行時に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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