Heim > Backend-Entwicklung > Golang > Wie entmarshaliere ich JSON in konkrete Strukturen in Go, wenn ich „interface{}' verwende?

Wie entmarshaliere ich JSON in konkrete Strukturen in Go, wenn ich „interface{}' verwende?

Linda Hamilton
Freigeben: 2024-11-28 17:06:17
Original
435 Leute haben es durchsucht

How to Unmarshal JSON into Concrete Structs in Go When Using `interface{}`?

Unmarshaling von JSON in konkrete Strukturen

Bei der Arbeit mit komplexen Datenstrukturen ist es oft notwendig, JSON in eine konkrete Struktur statt in eine Schnittstelle zu entmarshaling . Das Standardverhalten von json.Unmarshal besteht jedoch darin, die JSON-Daten in eine Karte zu konvertieren, wenn das Ziel eine Schnittstelle ist.

Problemerklärung

Im bereitgestellten Beispiel Die getFoo-Funktion gibt einen interface{}-Wert zurück, der eine konkrete Foo-Struktur umschließt. Wenn json.Unmarshal mit diesem Wert aufgerufen wird, wird eine Karte erstellt, anstatt die zugrunde liegende Foo-Struktur zu verwenden, da der Typ interface{} allein nicht genügend Informationen für das Unmarshaling bereitstellt.

Lösung: Explizit übergeben Strukturreferenz

Um dieses Problem zu beheben, ist es notwendig, explizit einen Zeiger auf die konkrete Struktur zu übergeben json.Unmarshal. Dadurch wird sichergestellt, dass der Decoder den richtigen Strukturtyp identifizieren kann:

func getFoo() interface{} {
    return &Foo{"bar"}
}
Nach dem Login kopieren

Durch die Rückgabe eines Zeigers auf die Struktur enthält der Interface{}-Wrapper nun einen Verweis auf den konkreten Typ, sodass json.Unmarshal den entmarshalieren kann Daten korrekt.

Hinweis:

Es ist wichtig zu beachten, dass diese Lösung gilt, wenn Der spezifische Strukturtyp ist zur Kompilierungszeit nicht bekannt. Wenn der Strukturtyp bekannt ist, ist es für eine bessere Typsicherheit und Leistung vorzuziehen, ihn direkt an json.Unmarshal zu übergeben.

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich JSON in konkrete Strukturen in Go, wenn ich „interface{}' verwende?. 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