ホームページ >バックエンド開発 >Golang >Go パッケージをインポートせずに、エクスポートされたすべての型を Go パッケージから取得するにはどうすればよいですか?

Go パッケージをインポートせずに、エクスポートされたすべての型を Go パッケージから取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-26 03:11:09441ブラウズ

How Can I Retrieve All Exported Types from a Go Package Without Importing It?

パッケージからエクスポートされた型を検査する方法

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。