Heim > Backend-Entwicklung > Golang > Wie erhalte ich die Signatur einer Go-Funktion als String?

Wie erhalte ich die Signatur einer Go-Funktion als String?

DDD
Freigeben: 2024-11-19 19:14:02
Original
815 Leute haben es durchsucht

How to Get a Go Function's Signature as a 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()
}
Nach dem Login kopieren

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

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

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!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage