En este ejemplo de área de juegos, json.Unmarshal devuelve un mapa en lugar de la estructura esperada: http ://play.golang.org/p/dWku6SPqj5.
El problema surge porque se pasa un parámetro de interfaz{} a json.Unmarshal y la biblioteca intenta descomponerlo en una matriz de bytes. Sin embargo, la biblioteca no tiene una referencia directa a la estructura correspondiente, aunque tiene una referencia reflect.Type.
El problema radica en el siguiente código:
var ping interface{} = Ping{}
deserialize([]byte(`{"id":42}`), &ping)
fmt.Println("DONE:", ping) // It's a simple map now, not a Ping. Why?
Para resolver este problema, pase un puntero a la estructura Ping explícitamente como una interfaz abstracta:
var ping interface{} = &Ping{}
deserialize([]byte(`{"id":42}`), ping)
fmt.Println("DONE:", ping)
Como alternativa, si un puntero directo no está disponible, cree un nuevo puntero usando reflect, deserialícelo y luego copie el valor nuevamente:
var ping interface{} = Ping{}
nptr := reflect.New(reflect.TypeOf(ping))
deserialize([]byte(`{"id":42}`), nptr.Interface())
ping = nptr.Interface()
fmt.Println("DONE:", ping)
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3