Go WebSocket JSON-Serialisierung/Deserialisierung: Umgang mit gemischten eingehenden Nachrichten
In Go wird das Gorilla-Websocket-Paket für die WebSocket-Kommunikation verwendet und eingehende Nachrichten verarbeitet Mischtypen können eine Herausforderung darstellen. Die conn.ReadJSON-Funktion der Bibliothek ist auf die Deserialisierung in einen einzelnen Strukturtyp beschränkt.
Problemstellung
Betrachten Sie zwei Strukturen, Foo und Bar, die eingehende Nachrichtentypen darstellen:
type Foo struct { A string `json:"a"` B string `json:"b"` } type Bar struct { C string `json:"c"` D string `json:"d"` }
Die Anforderung besteht darin, diese eingehenden Nachrichten zu verarbeiten und ihren Typ (Foo oder Bar) entsprechend zu identifizieren Deserialisieren Sie sie in die entsprechende Struktur.
Lösung
Um gemischte eingehende Nachrichten zu verarbeiten, kann der folgende Ansatz verwendet werden:
1. Verwenden Sie eine Wrapper-Struktur:
Erstellen Sie eine Wrapper-Struktur, Nachrichten, die ein Steuerfeld zur Angabe des Nachrichtentyps und ein X-Feld zur Aufnahme der deserialisierten Daten enthält.
type Messages struct { Control string `json:"control"` X json.RawMessage }
2. ReadJSON in die Wrapper-Struktur:
Verwenden Sie conn.ReadJSON, um die eingehende Nachricht in die Messages-Struktur zu deserialisieren.
var m Messages err := c.ReadJSON(&m) if err != nil { // handle error }
3. Analysieren Sie den Nachrichtentyp:
Bestimmen Sie basierend auf dem Wert von m.Control den tatsächlichen Nachrichtentyp (Foo oder Bar).
switch m.Control { case "Foo": // Convert the JSON to a Foo struct case "Bar": // Convert the JSON to a Bar struct }
Beispielcode:
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 }
Durch die Verwendung von json.RawMessage in der Messages-Struktur können die deserialisierten Daten verarbeitet werden dynamisch basierend auf dem Nachrichtentyp. Diese Lösung ermöglicht eine flexible Handhabung eingehender Nachrichten mit unterschiedlichen Strukturen.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit gemischten JSON-Nachrichtentypen in Go WebSocket mithilfe von Gorilla Websocket um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!