ホームページ >バックエンド開発 >Golang >Go パッケージ内のすべての構造を取得するにはどうすればよいですか?

Go パッケージ内のすべての構造を取得するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-29 21:00:29573ブラウズ

How can I retrieve all structures within a Go package?

Go でパッケージ内のすべての構造を取得する方法

Go パッケージ内では、名前またはインターフェイスの形式。これを行うための最良のアプローチは、Go ソース コードを解析し、特に ast.StructType を分離することです。

ソース解析

ソース コードを解析するには、Go次のコマンドを使用してソースのクローンを作成できます。

hg clone https://code.google.com/p/go/

ソースが利用可能になったら、次のコード スニペットに示すように、きれいなプリンタを使用して ast.StructType を分離できます。

func (P *Printer) Type(t *AST.Type) int {
    separator := semicolon;

    switch t.form {

    case AST.STRUCT, AST.INTERFACE:
            switch t.form {
            case AST.STRUCT: P.String(t.pos, "struct");
            case AST.INTERFACE: P.String(t.pos, "interface");
            }
            if t.list != nil {
                    P.separator = blank;
                    P.Fields(t.list, t.end);
            }
            separator = none;
            
    }
}

代替方法

go/lint ツールで使用される別のアプローチは、lint.go ファイルで同じタスクを実行することです。

case *ast.StructType:
        for _, f := range v.Fields.List {
            for _, id := range f.Names {
                check(id, "struct field")
            }
        }

次のように実装します。このアプローチでは、指定したパッケージ内で定義されているすべての構造のリストを取得できます。

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

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