"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment désérialiser les messages JSON WebSocket en tant que types d'union en Go?

Comment désérialiser les messages JSON WebSocket en tant que types d'union en Go?

Publié le 2025-03-12
Parcourir:551

How to Deserialize JSON Websocket Messages as Union Types in Go?

désérialiser les messages WebSocket JSON en tant que types d'union dans Go

Dans Go, la bibliothèque Gorilla WebSocket est couramment utilisée pour gérer les connexions WebSocket. Cependant, lorsque vous utilisez JSON pour la sérialisation et la désérialisation, la gestion des messages entrants de types différents présente un défi.

Considérez l'exemple suivant où vous avez des structures pour les types de messages "foo" et "bar":

type Foo struct {
    A string `json:"a"`
    B string `json:"b"`
}

type Bar struct {
    C string `json:"c"`
    D string `json:"d"`
}

La fonction Conn.readjson de Gorilla vous permet de désérialiser les messages JSON entrants en structures spécifiques. Cependant, vous devrez utiliser séparé Conn.readjson (foo) et Conn.readjson (bar) appelle des messages de différents types, qui est inefficace et lourd. Control String `JSON:" Control "` X JSON.RAWMESSAGE }

Le champ de contrôle indique le type de la charge utile, et x détient les données JSON brutes. Pour désérialiser les messages entrants en utilisant cette approche:

type Messages struct {
    Control string `json:"control"`
    X json.RawMessage
}

Cette solution vous permet de désérialiser les messages entrants quel que soit leur type, en utilisant le type d'interface RawMessage dans JSON.RAWMESSAGE. L'instruction Switch vérifie le champ de contrôle pour déterminer le type de message réel et désérialiser en conséquence.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3