Go でパッケージのパブリック メソッドを一覧表示する方法
質問:
方法特定のパッケージで利用可能なすべてのパブリック メソッドを一覧表示できますか?行きますか?
問題:
次のプロジェクトを考えてみましょう構造:
main.go:
package main func main() { // List all public methods here. }
l ibs/method.go:
package libs func Result1() { fmt.Println("Method Result1") } func Result2() { fmt.Println("Method Result2") }
答え:
リフレクションを使用してパブリック メソッドをリストするのは簡単に思えるかもしれませんが、残念ながら Go では直接不可能です。これは、コンパイラが未使用の関数を最適化し、最終的な実行可能ファイルからそれらの関数を削除するためです。
代替アプローチ:
パッケージの関数宣言を静的に分析する必要がある場合は、次のようにすることができます。 go/parser パッケージを使用します:
import ( "fmt" "go/ast" "go/parser" "go/token" "os" ) func main() { set := token.NewFileSet() packs, err := parser.ParseDir(set, "sub", nil, 0) if err != nil { fmt.Println("Failed to parse package:", err) os.Exit(1) } funcs := []*ast.FuncDecl{} for _, pack := range packs { for _, f := range pack.Files { for _, d := range f.Decls { if fn, isFn := d.(*ast.FuncDecl); isFn { funcs = append(funcs, fn) } } } } fmt.Printf("All functions: %+v\n", funcs) }
このアプローチでは、次のリストが提供されます。関数宣言 (呼び出し可能ではありません)。これらの関数を実行するには、別のファイルを作成し、個別に呼び出す必要があります。
以上がGo パッケージ内のパブリック メソッドをプログラムで一覧表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。