Maison > développement back-end > Golang > Comment désérialiser efficacement plusieurs types de messages JSON dans Go Websocket à l'aide de json.RawMessage ?

Comment désérialiser efficacement plusieurs types de messages JSON dans Go Websocket à l'aide de json.RawMessage ?

Patricia Arquette
Libérer: 2024-11-24 03:51:14
original
944 Les gens l'ont consulté

How to Deserialize Multiple JSON Message Types Efficiently in Go Websocket Using json.RawMessage?

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"`
}
Copier après la connexion

Désorganisez le message JSON entrant dans les messages struct.

var m Messages
err := c.ReadJSON(&m)
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal