Heim > Backend-Entwicklung > Golang > Wie rufe ich einen Funktionsnamen mithilfe von Reflection in Go ab?

Wie rufe ich einen Funktionsnamen mithilfe von Reflection in Go ab?

Linda Hamilton
Freigeben: 2024-11-08 10:55:02
Original
693 Leute haben es durchsucht

How to Retrieve a Function Name Using Reflection in Go?

Zugriff auf Funktionsnamen mit Reflection in Go

Reflection in Go ermöglicht es Entwicklern, die Typen und Werte jeder Variablen zu überprüfen. Eine häufige Aufgabe besteht darin, den Namen einer Funktion abzurufen. Versuche, direkt über den Typ der Funktion auf die Name-Methode zuzugreifen, können jedoch zu einer leeren Zeichenfolge führen.

Erwartetes Verhalten

Das bereitgestellte Code-Snippet importiert das Notwendige korrekt Pakete zum Nachdenken. Das Problem tritt jedoch auf, wenn versucht wird, den Funktionsnamen direkt vom Typ abzurufen.

name := typ.Name()
Nach dem Login kopieren

Dieser Ansatz liefert nicht das erwartete Ergebnis, da die Name-Methode mit dem tatsächlichen Funktionszeiger und nicht mit dem Typ arbeitet. Um den korrekten Namen zu erhalten, muss die Funktion FuncForPC aus dem Laufzeitpaket verwendet werden.

Lösung

Die Funktion FuncForPC übernimmt den Zeiger auf den Reflect.Value der Funktion und gibt ein *Func-Objekt zurück. Dieses Objekt stellt die richtige Name-Methode bereit, mit der der Name der Funktion abgerufen werden kann.

name := runtime.FuncForPC(reflect.ValueOf(main).Pointer()).Name()
Nach dem Login kopieren

Anhand der bereitgestellten Demonstration gibt der Code nun „main.main“ korrekt aus. Wenn nur der Funktionsname gewünscht wird, kann er durch Aufteilen der zurückgegebenen Zeichenfolge extrahiert werden.

Fazit

Durch die Verwendung von Reflektion und der FuncForPC-Funktion können Entwickler den genau abrufen Name einer beliebigen Funktion in Go. Diese Technik ermöglicht verschiedene Anwendungsfälle, wie z. B. die Überprüfung der Codestruktur und die Durchführung dynamischer Funktionsaufrufe.

Das obige ist der detaillierte Inhalt vonWie rufe ich einen Funktionsnamen mithilfe von Reflection in Go ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage