Heim >Backend-Entwicklung >Golang >Wie kann ich öffentliche Methoden in einem Go-Paket programmgesteuert auflisten?

Wie kann ich öffentliche Methoden in einem Go-Paket programmgesteuert auflisten?

Susan Sarandon
Susan SarandonOriginal
2025-01-05 10:33:46839Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn