Wie gehe ich mit eingehenden WebSocket-JSON-Nachrichten mit unterschiedlichen Strukturen in Golang um?

Susan Sarandon
Freigeben: 2024-11-16 17:17:03
Original
997 Leute haben es durchsucht

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

Verarbeitung eingehender WebSocket-JSON-Nachrichten mit Golang

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
}
Nach dem Login kopieren

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:

  1. Lesen die Nachricht in eine Nachrichtenstruktur:

    var m Messages
    err := c.ReadJSON(&m)
    if err != nil {
        // handle error
    }
    Nach dem Login kopieren
  2. 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
    Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage