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!