Funktionsnamen mit Reflektion abrufen
In Go bietet Reflektion den Mechanismus zum Überprüfen und Bearbeiten von Programmstrukturen zur Laufzeit. Der Zugriff auf den Namen einer Funktion ist ein solcher Anwendungsfall. Der Versuch, den Namen direkt aus seinem Typ abzurufen, kann jedoch zu einer leeren Zeichenfolge führen.
Erwartetes Verhalten
Abrufen des Namens einer Funktion mit „reflect.TypeOf(function)“. Name() gibt eine leere Zeichenfolge zurück, da es auf den Typ selbst zeigt, der nicht die Funktion enthält Name.
Lösung
Um den Namen der Funktion abzurufen, müssen wir runtime.FuncForPC verwenden. Diese Funktion nimmt den Zeiger auf den reflektierten Wert der Funktion und gibt einen Zeiger auf eine *Func-Struktur zurück. Der Aufruf der Name-Methode für diese *Func ergibt den erwarteten Funktionsnamen als:
name := runtime.FuncForPC(reflect.ValueOf(function).Pointer()).Name()
Dieser Ansatz gibt sowohl den Paket- als auch den Funktionsnamen zurück, z. B. „Paket.Funktion“. Bei Bedarf kann der Paketname durch Tokenisierung der Zeichenfolge extrahiert werden.
Das obige ist der detaillierte Inhalt vonWie rufe ich den Namen einer Funktion mithilfe von Reflection in Go ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!