Go Websocket : désérialisation de plusieurs types de messages JSON à l'aide de json.RawMessage
Lorsque vous travaillez avec Gorilla Websocket, gestion des messages JSON entrants de plusieurs types peut présenter un défi. Utiliser la méthode ReadJSON pour chaque type séparément peut être fastidieux. Cet article explore une solution qui utilise le type json.RawMessage pour gérer efficacement la désérialisation.
Problème :
Comment pouvons-nous désérialiser les messages JSON entrants dans différentes structures basées sur un champ de contrôle dans le JSON, sans utiliser plusieurs ReadJSON appels ?
Solution :
Définir une structure wrapper Messages avec un champ Control pour indiquer le type des données réelles et un champ X de type json.RawMessage à conserver les données sérialisées.
type Messages struct { Control string `json:"control"` X json.RawMessage `json:"X"` }
Désorganisez le message JSON entrant dans les messages struct.
var m Messages err := c.ReadJSON(&m)
Examinez le champ Contrôle pour déterminer le type réel des données. Décomposez le champ X dans la structure appropriée.
switch m.Control { case "Foo": var foo Foo if err := json.Unmarshal([]byte(m.X), &foo); err != nil { // handle error } // do something with foo case "Bar": ... follow pattern for Foo }
L'utilisation de json.RawMessage permet une approche générique pour désérialiser les messages entrants de différents types, simplifiant ainsi la gestion de plusieurs types de messages dans une application Websocket.
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!