Heim > Backend-Entwicklung > Golang > Wie geht „json.Unmarshal' mit Schnittstellen um und warum ist die explizite Typdeklaration von entscheidender Bedeutung?

Wie geht „json.Unmarshal' mit Schnittstellen um und warum ist die explizite Typdeklaration von entscheidender Bedeutung?

Barbara Streisand
Freigeben: 2024-12-02 13:23:11
Original
631 Leute haben es durchsucht

How Does `json.Unmarshal` Handle Interfaces, and Why Is Explicit Type Declaration Crucial?

Verstehen des JSON-Unmarshal-Verhaltens

Beim Versuch, JSON-Daten mit json.Unmarshal zu entmarshalieren, ist es wichtig zu verstehen, wie das Paket mit Variablentypen interagiert .

Die Schnittstelle Irrtum

Die Annahme, dass json.Unmarshal automatisch die konkrete Struktur verwendet, die einer Schnittstelle zugeordnet ist, ist ein weit verbreitetes Missverständnis. Das Paket erfordert eine explizite Anleitung zum gewünschten Unmarshaling-Typ.

Beispiel: Lost in Translation

Beachten Sie den bereitgestellten Beispielcode:

type Foo struct {
    Bar string `json:"bar"`
}

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

The Die Absicht besteht darin, dass getFoo() eine Foo-Struktur zurückgibt, aber da sie einer Schnittstelle zugewiesen ist, wird sie als Map behandelt. Denn wenn die Schnittstelle an json.Unmarshal übergeben wird, interpretiert das Paket sie als leere Schnittstelle und generiert eine Karte für das JSON-Objekt.

Die Lösung: Explizite Typdeklaration

Um dieses Problem zu beheben, übergeben Sie explizit einen Zeiger auf den gewünschten Strukturtyp innerhalb der Schnittstelle:

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

Wenn json.Unmarshal nun die Schnittstelle empfängt, identifiziert es den Zeiger auf die Struktur und entmarshmiert die JSON-Daten korrekt in die Strukturfelder.

Key Takeaway :

Denken Sie daran, dass json.Unmarshal sich auf die bereitgestellten expliziten Typinformationen verlässt, um das zu bestimmen Unmarshaling-Ziel. Wenn Sie möchten, dass eine bestimmte Struktur verwendet wird, müssen Sie innerhalb einer Schnittstelle explizit einen Wert dieses Typs oder einen Zeiger auf diesen Typ übergeben.

Das obige ist der detaillierte Inhalt vonWie geht „json.Unmarshal' mit Schnittstellen um und warum ist die explizite Typdeklaration von entscheidender Bedeutung?. 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