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()
This Der 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.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3