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

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

DDD
DDDOriginal
2024-11-19 19:14:02777Durchsuche

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

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!

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