Heim > Backend-Entwicklung > Golang > Wie entmarshaliere ich eingebettete Strukturen in Go?

Wie entmarshaliere ich eingebettete Strukturen in Go?

Mary-Kate Olsen
Freigeben: 2024-11-04 12:13:30
Original
870 Leute haben es durchsucht

How to Unmarshal Embedded Structs in Go?

Unmarshalling eingebetteter Strukturen in Go

Dieser Artikel befasst sich mit dem Problem des Unmarshallings von JSON-Daten in eine Struktur, die eine eingebettete Struktur enthält. Das bereitgestellte Beispiel, in dem die Inner-Struktur in die Outer-Struktur eingebettet ist, zeigt, dass die standardmäßige UnmarshalJSON-Methode für Inner aufgerufen wird und nur das Datenfeld ausgefüllt wird, während das Num-Feld von Outer leer bleibt.

Der Grund denn dieses Verhalten liegt im eingebetteten Strukturmechanismus von Go. Wenn eine eingebettete Struktur entmarshallt wird, zielt der Unmarshalling-Prozess direkt auf die eingebettete Struktur ab und ignoriert die Felder der äußeren Struktur.

Um dieses Problem zu beheben, wird eine einfachere und effizientere Lösung vorgeschlagen: die innere Struktur zu einem expliziten Feld zu machen in der Outer-Struktur.

Durch die explizite Deklaration von Inner als Feld wird die UnmarshalJSON-Methode der Outer-Struktur mit den gesamten JSON-Daten aufgerufen. Innerhalb dieser Methode kann das Datenfeld von Inner mit der UnmarshalJSON-Methode der eingebetteten Inner-Struktur gefüllt werden, während das Num-Feld separat gefüllt werden kann. Dieser Ansatz stellt sicher, dass beide Felder der äußeren Struktur während des Unmarshallings ordnungsgemäß gefüllt werden.

Hier ist ein funktionierendes Beispiel zur Veranschaulichung der Lösung:

<code class="go">type Outer struct {
    I Inner     // Inner as explicit field
    Num int `json:"Num"`
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich eingebettete Strukturen in Go?. 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