Maison > développement back-end > Golang > le corps du texte

Comment gérer les messages WebSocket JSON entrants avec différentes structures dans Golang ?

Susan Sarandon
Libérer: 2024-11-16 17:17:03
original
994 Les gens l'ont consulté

How to Handle Incoming WebSocket JSON Messages with Different Structures in Golang?

Gestion des messages WebSocket JSON entrants avec Golang

La sérialisation et la désérialisation des données JSON sont cruciales dans la communication WebSocket. Dans Go, la bibliothèque Websocket gorilla offre un moyen pratique d'envoyer et de recevoir des messages JSON. Cependant, lorsqu'il s'agit de plusieurs structures, déterminer leur type peut devenir un défi.

Pour gérer ce scénario, envisagez d'utiliser une structure de message générique comme ci-dessous :

type Messages struct {
  Control string `json:"control"`
  X json.RawMessage
}
Copier après la connexion

Dans cette structure, Control spécifie le type du message entrant, tandis que X est un champ non typé pouvant contenir les données réelles.

Pour gérer le message entrant, suivez ces étapes :

  1. Lisez le message dans une structure Messages :

    var m Messages
    err := c.ReadJSON(&m)
    if err != nil {
        // handle error
    }
    Copier après la connexion
  2. En fonction de la valeur de Control, déterminez le type de données :

    switch m.Control {
    case "Foo":
        var foo Foo
        if err := json.Unmarshal([]byte(m.X), &foo); err != nil {
            // handle error
        }
        // do something with foo
    }
    ...
    // Handle other cases similarly
    Copier après la connexion

En utilisant json.RawMessage, vous gagnez en flexibilité dans la gestion de plusieurs données genres. Cette approche vous permet de désérialiser dynamiquement les messages entrants en fonction de leur type spécifié.

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