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 .
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!