在此遊樂場範例中,json.Unmarshal 傳回一個映射而不是預期的結構:http ://play.golang.org/p/dWku6SPqj5.
出現此問題的原因是,interface{} 參數被傳遞給json.Unmarshal,並且庫嘗試將其解組為位元組數組。然而,該庫沒有直接引用相應的結構,即使它有一個reflect.Type引用。
問題出在下面的程式碼:
var ping interface{} = Ping{}
deserialize([]byte(`{"id":42}`), &ping)
fmt.Println("DONE:", ping) // It's a simple map now, not a Ping. Why?
要解決此問題,請將指向 Ping 結構體的指標明確地作為抽象介面傳遞:
var ping interface{} = &Ping{}
deserialize([]byte(`{"id":42}`), ping)
fmt.Println("DONE:", ping)
或者,如果直接指針不可用,請使用反射創建一個新指針,反序列化到其中,然後將值複製回來:
var ping interface{} = Ping{}
nptr := reflect.New(reflect.TypeOf(ping))
deserialize([]byte(`{"id":42}`), nptr.Interface())
ping = nptr.Interface()
fmt.Println("DONE:", ping)
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3