Heim > Backend-Entwicklung > Golang > Wie rufe ich den Namen eines Strukturfelds mit Go Reflection ab?

Wie rufe ich den Namen eines Strukturfelds mit Go Reflection ab?

Patricia Arquette
Freigeben: 2024-12-07 06:07:17
Original
535 Leute haben es durchsucht

How to Retrieve a Struct Field's Name Using Go Reflection?

Strukturfeldnamen mit Reflection abrufen

Mit den Reflection-Funktionen von Go kann man eine beliebige Struktur mithilfe des Reflection-Pakets introspizieren. Es stellt sich jedoch häufig die Frage: Wie erhalte ich den Namen eines Strukturfelds?

Betrachten Sie den folgenden Code:

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

In diesem Beispiel besteht das Ziel darin, „Foo“ mit zu drucken Spiegelung. Allerdings gibt der Code derzeit „string“ aus. Warum passiert das?

Die Antwort liegt in den Methoden des Reflect-Pakets:

  • reflect.Value.Field: Ruft einen Reflect.Value ab, der das Feld an einem bestimmten Index in einer Struktur darstellt .
  • reflect.Value.Type: Ruft den Reflect.Type des ab Reflect.Value.
  • Reflect.Type.Field: Ruft ein Reflect.StructField ab, das ein bestimmtes Feld in einem Strukturtyp beschreibt.

Um den Feldnamen zu erhalten, müssen wir zuerst das abrufen reflektieren.Wert für die Struktur selbst. Wir können dies tun, indem wir den Zeiger auf die Struktur dereferenzieren und ihren Reflect.Value mithilfe von Reflect.ValueOf abrufen.

Als nächstes müssen wir den Reflect.Value für das erste Feld der Struktur abrufen. Wir können dies mit val.Field(0) tun.

Schließlich können wir den Reflect.Type des Feldes mit val.Field(0).Type() abrufen. Um den Feldnamen zu erhalten, können wir dann val.Field(0).Type().Name() aufrufen.

Daher gibt der geänderte Code unten korrekt „Foo“ aus:

fmt.Println(val.Field(0).Type().Field(0).Name())
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie rufe ich den Namen eines Strukturfelds mit Go Reflection 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