Home > Backend Development > Golang > How to Handle Incoming WebSocket JSON Messages with Different Structures in Golang?

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

Susan Sarandon
Release: 2024-11-16 17:17:03
Original
1085 people have browsed it

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

Handling Incoming WebSocket JSON Messages with Golang

Serialization and deserialization of JSON data is crucial in WebSocket communication. In Go, the gorilla websocket library provides a convenient way to send and receive JSON messages. However, when dealing with multiple structs, determining their type can become a challenge.

To handle this scenario, consider using a generic message structure like below:

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

In this structure, Control specifies the type of the incoming message, while X is an untyped field that can hold the actual data.

To handle the incoming message, follow these steps:

  1. Read the message into a Messages struct:

    var m Messages
    err := c.ReadJSON(&m)
    if err != nil {
        // handle error
    }
    Copy after login
  2. Based on the value of Control, determine the data type:

    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
    Copy after login

By utilizing json.RawMessage, you gain flexibility in handling multiple data types. This approach allows you to dynamically deserialize incoming messages based on their specified type.

The above is the detailed content of How to Handle Incoming WebSocket JSON Messages with Different Structures in Golang?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template