Heim >Backend-Entwicklung >Golang >Wie kann ich öffentliche Methoden in einem Go-Paket programmgesteuert auflisten?
So listen Sie die öffentlichen Methoden eines Pakets in Go auf
Frage:
Wie Kann ich alle öffentlichen Methoden auflisten, die in einem bestimmten Paket verfügbar sind? Los?
Problem:
Betrachten Sie das folgende Projekt Struktur:
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") }
Antwort:
While Es mag einfach erscheinen, öffentliche Methoden mithilfe von Reflection aufzulisten, in Go ist dies leider nicht direkt möglich. Dies liegt daran, dass der Compiler nicht verwendete Funktionen optimiert und sie aus der endgültigen ausführbaren Datei entfernt.
Alternativer Ansatz:
Wenn Sie die Funktionsdeklarationen des Pakets statisch analysieren müssen, können Sie dies tun Verwenden Sie das Paket 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) }
Dieser Ansatz liefert Ihnen eine Liste von Funktionsdeklarationen, obwohl dies der Fall ist nicht aufrufbar. Um diese Funktionen auszuführen, müssten Sie eine separate Datei erstellen und diese einzeln aufrufen.
Das obige ist der detaillierte Inhalt vonWie kann ich öffentliche Methoden in einem Go-Paket programmgesteuert auflisten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!