Heim > Backend-Entwicklung > Golang > Wie kann ich Strukturfeldnamen mithilfe von Go Reflection abrufen?

Wie kann ich Strukturfeldnamen mithilfe von Go Reflection abrufen?

Barbara Streisand
Freigeben: 2024-12-31 20:33:14
Original
726 Leute haben es durchsucht

How Can I Retrieve Struct Field Names Using Go Reflection?

Strukturfeldnamen mithilfe von Reflektion abrufen

In Golang ermöglicht Reflektion den Zugriff auf Informationen über die Struktur und das Verhalten des Programms zur Laufzeit. Ein häufiger Anwendungsfall ist das Abrufen der Namen von Feldern in einer Struktur.

Betrachten wir das folgende Beispiel:

type A struct {
    Foo string
}

func (a *A) PrintFoo() {
    fmt.Println("Foo value is " + a.Foo)
}

func main() {
    a := &A{Foo: "afoo"}
    val := reflect.Indirect(reflect.ValueOf(a))
    fmt.Println(val.Field(0).Type().Name()) // Prints "string"
}
Nach dem Login kopieren

Das Ziel hier ist, „Foo“ als Feldnamen auszugeben, aber Stattdessen wird „string“ ausgegeben. Um dieses Verhalten zu verstehen, schauen wir uns den Code genauer an.

Zuerst wandelt „reflect.Indirect(reflect.ValueOf(a))“ den Zeiger auf die Struktur a in einen „reflect.Value“ um, der den zugrunde liegenden Wert darstellt. val.Field(0) gibt einen Reflect.Value zurück, der dem ersten Feld in der Struktur entspricht, in diesem Fall Foo.

Val.Field(0).Type().Name() ruft jedoch ab der Typ des Feldes, nämlich string. Der Name des Feldes selbst kann wie folgt abgerufen werden:

fmt.Println(val.Type().Field(0).Name) // Prints "Foo"
Nach dem Login kopieren

Dies liegt daran, dass val.Type() Zugriff auf die Typinformationen der Struktur gewährt und das nachfolgende Field(0).Name den Namen abruft des ersten Felds.

Zusammenfassend lässt sich sagen, dass zum Abrufen des Namens eines Strukturfelds mithilfe von Reflektion die Verwendung von val.Type().Field(0).Name anstelle von erforderlich ist val.Field(0).Type().Name.

Das obige ist der detaillierte Inhalt vonWie kann ich Strukturfeldnamen mithilfe von Go Reflection abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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