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

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

Susan Sarandon
リリース: 2025-01-05 10:33:46
オリジナル
801 人が閲覧しました

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

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