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

Wie rufe ich den Namen einer Funktion mithilfe von Reflection in Go ab?

Linda Hamilton
Linda HamiltonOriginal
2024-11-08 15:37:01407Durchsuche

How to Retrieve a Function's Name Using Reflection in Go?

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!

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