Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erhalte ich den Namen einer Funktion mithilfe von Go Reflection?

Wie erhalte ich den Namen einer Funktion mithilfe von Go Reflection?

Linda Hamilton
Linda HamiltonOriginal
2024-11-12 20:45:02993Durchsuche

How to Obtain the Name of a Function Using Go Reflection?

Reflexion in Go verstehen: Funktionsnamen abrufen

Im Reflexionssystem von Go ist das Abrufen des Namens einer Funktion nicht so einfach, wie es sein könnte erscheinen. Das erwartete Verhalten besteht in bestimmten Szenarien darin, beim Aufrufen der Name-Methode eine leere Zeichenfolge zu erhalten.

Unerwartete leere Zeichenfolge:

Bei Verwendung des folgenden Codeausschnitts wird der Name Methode gibt eine leere Zeichenfolge zurück:

package main

import "fmt"
import "reflect"

func main() {
    typ := reflect.TypeOf(main)
    name := typ.Name()
    fmt.Println("Name of function: " + name)
}

In diesem Beispiel versuchen wir, den Namen der Hauptfunktion mithilfe von Reflektion abzurufen. Die Ausgabe lautet jedoch „Name der Funktion:“, was auf einen leeren Namen hinweist.

Lösung mit runtime.FuncForPC:

Der Schlüssel zur Lösung dieses Problems liegt in der Verwendung die runtime.FuncForPC-Funktion. Diese Funktion gibt einen Zeiger auf einen Func-Typ zurück, der zusätzliche Informationen über die Funktion bereitstellt, einschließlich ihres Namens.

package main

import "fmt"
import "reflect"
import "runtime"

func main() {
    name := runtime.FuncForPC(reflect.ValueOf(main).Pointer()).Name()
    fmt.Println("Name of function: " + name)
}

Das Ergebnis lautet nun „main.main“, was den Namen der Funktion genau wiedergibt Funktion. Wenn Sie nur den Funktionsnamen ohne den Paketnamen extrahieren möchten, können Sie die Zeichenfolge mit der Funktion strings.SplitN teilen.

Das obige ist der detaillierte Inhalt vonWie erhalte ich den Namen einer Funktion mithilfe von Go Reflection?. 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