Maison >développement back-end >Golang >Comment gérer l'assertion de type après avoir désorganisé JSON dans une « interface {} » dans Go ?
Désagrégation dans une interface{} et exécution d'une assertion de type
Lors de la réception de messages via un système RabbitMQ et de l'exécution d'une assertion de type, il est important de comprendre les types qui ne sont pas marshalés par le package json.
Démarshaling par défaut Types
Par défaut, json.Unmarshal renvoie les valeurs suivantes types :
Désagrégation dans une interface{}
Lors du démarshaling dans une interface{}, la valeur renvoyée sera une map[string]interface{} générique. Pour déterminer le type réel dans la carte, vous pouvez soit :
Exemple d'utilisation d'une structure Wrapper
Pour éviter de décompresser manuellement les données, pensez en utilisant une structure wrapper comme la suivante :
type Unpacker struct { Data interface{} } func (u *Unpacker) UnmarshalJSON(b []byte) error { smth1 := &Something1{} err := json.Unmarshal(b, smth1) if err == nil & smth1.Thing != "" { u.Data = smth1 return nil } if _, ok := err.(*json.UnmarshalTypeError); err != nil & !ok { return err } smth2 := &Something2{} err = json.Unmarshal(b, smth2) if err != nil { return err } u.Data = smth2 return nil }
Cette structure wrapper vous permet de désorganiser les données dans Something1 ou Something2, selon le type de données reçues.
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!