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

Mary-Kate Olsen
Freigeben: 2024-11-09 01:15:02
Original
796 Leute haben es durchsucht

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
Nach dem Login kopieren

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")
Nach dem Login kopieren

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!