Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greife ich mithilfe von Reflection in Go über einen Zeiger auf Felder in einer Struktur zu?

Wie greife ich mithilfe von Reflection in Go über einen Zeiger auf Felder in einer Struktur zu?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-09 01:15:02825Durchsuche

How to Access Fields in a Struct Through a Pointer Using Reflection in Go?

reflect: Behebung des Zeigerfehlers in FieldByName

Im bereitgestellten Code versuchen wir, auf das „letzte“ Feld einer „Familie“ zuzugreifen " Strukturieren mit Reflektion. Das Feld „Familie“ ist jedoch ein Zeiger, und der direkte Zugriff auf sein „letztes“ Feld mit „FieldByName“ führt zu einem Fehler:

reflect: call of reflect.Value.FieldByName on ptr Value

Um dieses Problem zu beheben, müssen wir zunächst den Zeiger für den Zugriff dereferenzieren der tatsächliche Wert der Struktur. Dies kann mit der „Indirect“-Funktion aus dem „reflect“-Paket erreicht werden.

Hier ist der geänderte Code:

familyPtr := v.FieldByName("family")
v = reflect.Indirect(familyPtr).FieldByName("last")

In diesem Code rufen wir zunächst den Reflect.Value von ab Feld „Familie“ mit „FieldByName“. Dann verwenden wir „Indirect“, um den Zeiger zu dereferenzieren und den tatsächlichen Wert der „Family“-Struktur zu erhalten. Schließlich können wir auf das „letzte“ Feld zugreifen, indem wir „FieldByName“ für den dereferenzierten Wert verwenden.

Wenn wir diesem Ansatz folgen, können wir auf das „letzte“ Feld der „Family“-Struktur zugreifen, selbst wenn darauf zugegriffen wird eine Zeigerreferenz.

Das obige ist der detaillierte Inhalt vonWie greife ich mithilfe von Reflection in Go über einen Zeiger auf Felder in einer Struktur zu?. 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