Heim >Backend-Entwicklung >Golang >Wie kann ich den Namen einer Go-Funktion zur Laufzeit abrufen?

Wie kann ich den Namen einer Go-Funktion zur Laufzeit abrufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-25 14:58:13147Durchsuche

How Can I Get a Go Function's Name at Runtime?

So rufen Sie Funktionsnamen in Go ab

Oft ist es wünschenswert, den Namen einer Funktion in Go zur Laufzeit abzurufen. Dies kann für Debugging-Zwecke, Protokollierung oder andere Metaprogrammierungsaufgaben nützlich sein.

runtime.FuncForPC: Eine native Lösung

Go bietet eine integrierte Funktion, Runtime. FuncForPC, das den Namen einer Funktion anhand ihrer PC-Adresse (Programmzähler) abrufen kann. Allerdings ist Reflektion erforderlich, um die PC-Adresse zu erhalten, was umständlich sein kann.

Ein vereinfachter Ansatz

Um den Prozess zu vereinfachen, eine unkomplizierte Lösung mit Reflect und Runtime. FuncForPC kann implementiert werden:

package main

import (
    "fmt"
    "reflect"
    "runtime"
)

func foo() {
}

func GetFunctionName(i interface{}) string {
    return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
}

func main() {
    fmt.Println("name:", GetFunctionName(foo))
}

Diese Funktion akzeptiert einen generischen Schnittstellenparameter i und gibt den Namen der dieser Schnittstelle zugeordneten Funktion zurück. In diesem Fall ist foo die Funktion, deren Name abgerufen wird.

Beispielverwendung

Das folgende Beispiel zeigt die Verwendung der GetFunctionName-Funktion:

package main

import (
    "fmt"
)

func foo() {
}

func main() {
    fmt.Println("name:", GetFunctionName(foo))
}

Wenn Sie dieses Programm ausführen, wird Folgendes ausgegeben:

name: foo

Dies bestätigt, dass der GetFunctionName Funktion ruft erfolgreich den Namen der foo-Funktion ab.

Das obige ist der detaillierte Inhalt vonWie kann ich den Namen einer Go-Funktion zur Laufzeit abrufen?. 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