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