ホームページ >バックエンド開発 >Golang >Go パッケージ内のパブリック メソッドをプログラムで一覧表示するにはどうすればよいですか?

Go パッケージ内のパブリック メソッドをプログラムで一覧表示するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-05 10:33:46809ブラウズ

How Can I Programmatically List Public Methods in a Go Package?

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

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