ホームページ >バックエンド開発 >Golang >Go パッケージのパブリック メソッドをリストするにはどうすればよいですか?

Go パッケージのパブリック メソッドをリストするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-06 12:13:14420ブラウズ

How to List Public Methods of a Go Package?

Go でパッケージのパブリック メソッドをリストする

質問:

どのようにして可能ですか? Go でパッケージのパブリック メソッドを列挙するには?次のコードを考えてみましょう構造:

main.go:

package main

func main() {
    // list public methods in here
}

libs/met hod.go:

package libs

func Result1() {
    fmt.Println("method Result1")
}

func Result2() {
    fmt.Println("method Result2")
}

答え:

残念ながら、 Go には、このリクエストに対する直接的な機能がありません。パッケージがインポートされると、コンパイラーは最適化中に未使用のメソッドを削除する場合があります。したがって、パッケージをインポートするだけでは、すべてのメソッドが存在することは保証されません。

代替:

静的分析:

Go のリフレクション ライブラリを使用して、パッケージのソース コードを解析し、関数宣言を抽出できます。次の例を考えてみましょう。

import (
    "fmt"
    "go/parser"
    "go/token"
)

func main() {
    fileset := token.NewFileSet()
    packages, err := parser.ParseDir(fileset, "./libs", nil, 0)
    if err != nil {
        fmt.Println("Parsing failed:", err)
        return
    }

    methods := []string{}
    for _, p := range packages {
        // Get all methods in each source file.
        for _, f := range p.Files {
            for _, dec := range f.Decls {
                if fn, ok := dec.(*parser.FuncDecl); ok && fn.Name.IsExported() {
                    methods = append(methods, fn.Name.String())
                }
            }
        }
    }

    fmt.Println("Exported methods in package 'libs':", methods)
}

注: このアプローチでは、関数の宣言のみが提供され、その実装は提供されません。

動的リフレクション:

あるいは、実行時に Go のリフレクト パッケージを使用して、 価値。ただし、これには、対象の型の初期化されたインスタンスが必要です。

これらのアプローチには制限があり、すべてのユースケースに適しているわけではないことに注意してください。

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

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