Heim > Artikel > Backend-Entwicklung > Wie greife ich mithilfe von Reflection in Go über einen Zeiger auf Felder in einer Struktur zu?
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!