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

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

Susan Sarandon
リリース: 2024-12-14 07:25:11
オリジナル
622 人が閲覧しました

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

パッケージ内でエクスポートされた型を検出する

Go プロジェクト内の複数のパッケージ間でコラボレーションする場合、多くの場合、エクスポートされた型にアクセスして利用することが必要になります。他のパッケージから。この記事では、パッケージ内で定義されているすべての型を取得するための 2 つの効果的な手法を検討し、開発者が外部型を独自のコードベースにシームレスに統合できるようにします。

1. go/importer の利用

go/importer パッケージは、パッケージをインポートしてその内容をイントロスペクトするための簡単なメカニズムを提供します。これは、パッケージが正常にインポートされると Package オブジェクトを返す Import 関数を通じて実現できます。返された Package オブジェクトには、宣言された識別子のスコープを含む豊富な情報が含まれています。 Scope の Names メソッドを反復処理することで、パッケージ内のエクスポートされたすべての型の名前を取得できます。

例:

package demo

type People struct {
    Name string
    Age  uint
}

type UserInfo struct {
    Address  string
    Hobby    []string
    NickNage string
}
ログイン後にコピー
ログイン後にコピー
// In a separate package
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)
    }
}
ログイン後にコピー

2. Reflection

Reflection は、実行時に型を検査する動的なアプローチを提供します。 TypeOf 関数を利用すると、名前や基礎となる構造を含む、任意の値の型情報を取得できます。

例:

package demo

type People struct {
    Name string
    Age  uint
}

type UserInfo struct {
    Address  string
    Hobby    []string
    NickNage string
}
ログイン後にコピー
ログイン後にコピー
// In a separate package
import (
    "fmt"
    "reflect"
)

func main() {
    peopleType := reflect.TypeOf(People{})
    fmt.Println(peopleType.Name()) // Prints "People"

    userInfoType := reflect.TypeOf(UserInfo{})
    fmt.Println(userInfoType.Name()) // Prints "UserInfo"
}
ログイン後にコピー

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

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