Heim >Backend-Entwicklung >Golang >Wie kann ich die Signatur einer Go-Funktion als Zeichenfolge abrufen?

Wie kann ich die Signatur einer Go-Funktion als Zeichenfolge abrufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-23 00:12:341039Durchsuche

How Can I Retrieve a Go Function's Signature as a String?

Abrufen der Signatur einer Funktion als String in Go

Bestimmen der Signatur einer Funktion mit einem bestimmten Namen und einer bestimmten Signatur in Go in Go Das Hauptpaket ist entscheidend für die Bereitstellung informativer Fehlermeldungen bei Unstimmigkeiten.

Kann reflektieren.Type.String() Signatur abrufen?

Reflect.Type.String() bietet zwar den Namen des Typs (wie main.ModuleInitFunc), liefert jedoch nicht die vollständige Signatur. Dies wird besonders deutlich, wenn es um Funktionswerte geht, die benannte Typen haben.

Konstruktion der Signatur

Um die Signatur zu erstellen, müssen wir manuell Informationen aus dem Reflect.Type sammeln .

  • Type.In() liefert den Typ des iten Parameter.
  • Type.Out() stellt den Typ des iten Ergebnistyps bereit.

Beispielimplementierung

Unten ist eine Beispielfunktion, die die Signatur eines Funktionswerts generiert:

func signature(f interface{}) string {
    t := reflect.TypeOf(f)
    if t.Kind() != reflect.Func {
        return "<not a function>"
    }

    ...

    return buf.String()
}

Diese Funktion erstellt die Signatur, indem die Eingabe- und Ausgabetypen durchlaufen und zu einer für Menschen lesbaren Zeichenfolge zusammengesetzt werden.

Testen der Signaturfunktion

Das Testen der Signaturfunktion liefert die folgenden Ergebnisse:

fmt.Println(signature(func(i int) error { return nil })) // func (int) error
fmt.Println(signature(myFunc)) // func (int) error
fmt.Println(signature(time.Now)) // func () time.Time
fmt.Println(signature(os.Open)) // func (string) (*os.File, error)
fmt.Println(signature(log.New)) // func (io.Writer, string, int) *log.Logger
fmt.Println(signature("")) // <not a function>

Es ist wichtig zu beachten, dass Go keinen Zugriff auf Parameter- und Ergebnistypnamen bietet, daher werden diese weggelassen Unterschrift.

Das obige ist der detaillierte Inhalt vonWie kann ich die Signatur einer Go-Funktion als Zeichenfolge abrufen?. 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