Heim > Artikel > Backend-Entwicklung > Wie erhalte ich die Signatur einer Go-Funktion als String?
So erhalten Sie die Signatur einer Funktion als String in Go
Ihre Anfrage betrifft den Abruf der Signatur, einer String-Darstellung einer Funktion Typ, gegeben eine Funktionsvariable.
Verstehen Reflect.Type.String()
Die Methode Reflect.Type.String() gibt den Namen des Typs zurück, nicht die vollständige Signatur. Wenn der Funktionswert ein Funktionsliteral (unbenannter Typ) ist, wird die Signatur gedruckt.
Signatur manuell erstellen
Um die Signatur eines benannten Typs abzurufen, Informationen aus dem Reflect.Type wird benötigt. Hier ist eine Funktion, die die Signatur erstellt:
func signature(f interface{}) string { t := reflect.TypeOf(f) if t.Kind() != reflect.Func { return "<not a function>" } buf := strings.Builder{} buf.WriteString("func (") for i := 0; i < t.NumIn(); i++ { if i > 0 { buf.WriteString(", ") } buf.WriteString(t.In(i).String()) } buf.WriteString(")") if numOut := t.NumOut(); numOut > 0 { if numOut > 1 { buf.WriteString(" (") } else { buf.WriteString(" ") } for i := 0; i < t.NumOut(); i++ { if i > 0 { buf.WriteString(", ") } buf.WriteString(t.Out(i).String()) } if numOut > 1 { buf.WriteString(")") } } return buf.String() }
Testen der Funktion
Beispielausgabe der Signaturfunktion:
fmt.Println(signature(func(i int) error { return nil })) fmt.Println(signature(myFunc)) fmt.Println(signature(time.Now)) fmt.Println(signature(os.Open)) fmt.Println(signature(log.New)) fmt.Println(signature(""))
Erwartete Ausgabe :
func (int) error func (int) error func () time.Time func (string) (*os.File, error) func (io.Writer, string, int) *log.Logger <not a function>
Hinweis: Das Drucken von Parameter- und Ergebnistypnamen ist nicht möglich möglich aufgrund des Mangels an zugänglichen Informationen.
Das obige ist der detaillierte Inhalt vonWie erhalte ich die Signatur einer Go-Funktion als String?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!