Heim >Backend-Entwicklung >Golang >Wie liste ich öffentliche Methoden eines Go-Pakets auf?

Wie liste ich öffentliche Methoden eines Go-Pakets auf?

Barbara Streisand
Barbara StreisandOriginal
2024-12-06 12:13:14417Durchsuche

How to List Public Methods of a Go Package?

Öffentliche Methoden eines Pakets in Go auflisten

Frage:

Wie ist das möglich? die öffentlichen Methoden eines Pakets in Go auflisten? Betrachten Sie die folgende Codestruktur:

main.go:

package main

func main() {
    // list public methods in here
}

libs/method.go:

package libs

func Result1() {
    fmt.Println("method Result1")
}

func Result2() {
    fmt.Println("method Result2")
}

Antwort:

Bedauerlicherweise fehlt Go eine direkte Funktion für diese Anfrage. Wenn ein Paket importiert wird, entfernt der Compiler möglicherweise nicht verwendete Methoden während der Optimierung. Somit garantiert das bloße Importieren eines Pakets nicht das Vorhandensein aller Methoden.

Alternativen:

Statische Analyse:

Mit der Reflection-Bibliothek von Go können Sie den Quellcode des Pakets analysieren und Funktionsdeklarationen extrahieren. Betrachten Sie das folgende Beispiel:

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)
}

Hinweis: Dieser Ansatz stellt nur Funktionsdeklarationen bereit, nicht deren Implementierungen.

Dynamische Reflexion:

Alternativ können Sie das Reflect-Paket von Go zur Laufzeit verwenden, um die Methoden eines Werts zu überprüfen. Hierzu ist jedoch eine initialisierte Instanz des betreffenden Typs erforderlich.

Bedenken Sie, dass diese Ansätze Einschränkungen unterliegen und möglicherweise nicht für alle Anwendungsfälle geeignet sind.

Das obige ist der detaillierte Inhalt vonWie liste ich öffentliche Methoden eines Go-Pakets auf?. 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