Hier sind einige Titeloptionen unter Berücksichtigung der Notwendigkeit eines Frageformats: * **Warum gibt „json.Unmarshal' in Go eine Karte anstelle einer Struktur zurück?** (Einfach und direkt) * **Golang: Unmarshaling int

DDD
Freigeben: 2024-10-26 02:44:02
Original
324 Leute haben es durchsucht

Here are a few title options, keeping in mind the need for a question format:

* **Why Does `json.Unmarshal` Return a Map Instead of a  Struct in Go?** (Simple and direct)
* **Golang: Unmarshaling into an Interface - Why is My Struct a Map?** (More specif

Warum gibt json.Unmarshal eine Karte anstelle der erwarteten Struktur zurück?

In diesem Spielplatzbeispiel gibt json.Unmarshal eine Karte anstelle der erwarteten Struktur zurück: http ://play.golang.org/p/dWku6SPqj5.

Das Problem entsteht, weil ein interface{}-Parameter an json.Unmarshal übergeben wird und die Bibliothek versucht, ihn in ein Byte-Array zu entmarshalieren. Allerdings hat die Bibliothek keinen direkten Verweis auf die entsprechende Struktur, obwohl sie über einen Reflect.Type-Verweis verfügt.

Das Problem liegt im folgenden Code:

<code class="go">var ping interface{} = Ping{}
deserialize([]byte(`{"id":42}`), &ping)
fmt.Println("DONE:", ping) // It's a simple map now, not a Ping. Why?</code>
Nach dem Login kopieren

To Um dieses Problem zu lösen, übergeben Sie entweder einen Zeiger auf die Ping-Struktur explizit als abstrakte Schnittstelle:

<code class="go">var ping interface{} = &Ping{}
deserialize([]byte(`{"id":42}`), ping)
fmt.Println("DONE:", ping)</code>
Nach dem Login kopieren

Alternativ: Wenn kein direkter Zeiger verfügbar ist, erstellen Sie einen neuen Zeiger mit „Reflect“, deserialisieren Sie ihn und kopieren Sie ihn dann der Wert zurück:

<code class="go">var ping interface{} = Ping{}
nptr := reflect.New(reflect.TypeOf(ping))
deserialize([]byte(`{"id":42}`), nptr.Interface())
ping = nptr.Interface()
fmt.Println("DONE:", ping)</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonHier sind einige Titeloptionen unter Berücksichtigung der Notwendigkeit eines Frageformats: * **Warum gibt „json.Unmarshal' in Go eine Karte anstelle einer Struktur zurück?** (Einfach und direkt) * **Golang: Unmarshaling int. 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!