Maison > Article > développement back-end > Pourquoi le démarshaling dans un pointeur non initialisé échoue-t-il lors de Go ?
Désérialisation en références et pointeurs
Dans le processus de désérialisation des données JSON en structures Go, la fonction json.Unmarshal joue un rôle crucial. Cependant, les utilisateurs peuvent rencontrer des divergences lorsqu'ils tentent de désorganiser les références et les pointeurs.
Considérez les extraits de code suivants :
// Unmarshaling into a reference variable var animals Animal err := json.Unmarshal(jsonBlob, &animals)
Ce code réussit à désorganiser les données JSON dans la variable de référence des animaux.
Cependant, un résultat différent se produit lors de la tentative de démarshal dans une variable de pointeur :
// Unmarshaling into a pointer variable var animals *Animal err := json.Unmarshal(jsonBlob, animals)
Dans ce cas, Unmarshal échoue avec une erreur obscure : "json: Unmarshal(nil *main.Animal )". Cette erreur se produit car les animaux sont un pointeur non initialisé.
La documentation d'Unmarshal indique que "Si le pointeur est nul, Unmarshal lui alloue une nouvelle valeur vers laquelle pointer." Cependant, ce comportement ne semble pas s'appliquer dans le cas de pointeurs non initialisés, comme en témoigne le message d'erreur.
Pour résoudre ce problème, il est recommandé d'initialiser la variable du pointeur animaux avant de tenter de le désorganiser :
animals = &Animal{} err := json.Unmarshal(jsonBlob, animals)
Avec cette modification, le processus de démarshalage devrait réussir.
Notez que dans la documentation, le terme « démarshaling » est utilisé de manière cohérente.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!