Serialisierung und Deserialisierung von JSON-Daten sind für die WebSocket-Kommunikation von entscheidender Bedeutung. In Go bietet die Gorilla-Websocket-Bibliothek eine bequeme Möglichkeit, JSON-Nachrichten zu senden und zu empfangen. Wenn Sie jedoch mit mehreren Strukturen arbeiten, kann die Bestimmung ihres Typs zu einer Herausforderung werden.
Um dieses Szenario zu bewältigen, sollten Sie die Verwendung einer generischen Nachrichtenstruktur wie unten in Betracht ziehen:
type Messages struct { Control string `json:"control"` X json.RawMessage }
In dieser Struktur Control Gibt den Typ der eingehenden Nachricht an, während X ein untypisiertes Feld ist, das die tatsächlichen Daten enthalten kann.
Um die eingehende Nachricht zu verarbeiten, befolgen Sie diese Schritte:
Lesen die Nachricht in eine Nachrichtenstruktur:
var m Messages err := c.ReadJSON(&m) if err != nil { // handle error }
Bestimmen Sie basierend auf dem Wert von Control den Datentyp:
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
By Durch die Verwendung von json.RawMessage gewinnen Sie Flexibilität bei der Verarbeitung mehrerer Datentypen. Mit diesem Ansatz können Sie eingehende Nachrichten basierend auf ihrem angegebenen Typ dynamisch deserialisieren.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit eingehenden WebSocket-JSON-Nachrichten mit unterschiedlichen Strukturen in Golang um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!