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
Freigeben: 2025-01-05 10:33:46
Original
848 Leute haben es durchsucht

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.
    }
    Nach dem Login kopieren
  • l ibs/method.go:

    package libs
    
    func Result1() {
      fmt.Println("Method Result1")
    }
    
    func Result2() {
      fmt.Println("Method Result2")
    }
    Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage