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" }
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:
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())
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!