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>
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>
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>
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!