首頁 > 後端開發 > Golang > 如何使用 Gorilla Websocket 處理 Go WebSocket 中的混合 JSON 訊息類型?

如何使用 Gorilla Websocket 處理 Go WebSocket 中的混合 JSON 訊息類型?

Mary-Kate Olsen
發布: 2024-11-14 19:40:03
原創
405 人瀏覽過

How to Handle Mixed JSON Message Types in Go WebSocket using Gorilla Websocket?

Go WebSocket JSON 序列化/反序列化:處理混合傳入訊息

在Go 中,使用gorilla websocket 套件進行WebSocket 通訊套件,處理傳入訊息混合類型可能會帶來挑戰。此函式庫的 conn.ReadJSON 函數僅限於反序列化為單一結構類型。

問題陳述

考慮兩個結構,Foo 和Bar,代表傳入訊息類型:

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

type Bar struct {
    C string `json:"c"`
    D string `json:"d"`
}
登入後複製

要求是處理這些傳入訊息類型:

要求是處理這些傳入訊息類型:

要求是處理這些傳入訊息類型:

要求是處理這些傳入訊息類型:

要求是處理這些傳入。訊息,識別它們的類型(Foo 或Bar)並相應地將它們反序列化為適當的結構。

type Messages struct {
    Control string `json:"control"`
    X json.RawMessage
}
登入後複製

解決方案

要處理混合傳入訊息,可以採用以下方法:

var m Messages
err := c.ReadJSON(&m)
if err != nil {
    // handle error
}
登入後複製
1.使用包裝結構:

建立一個包裝結構Messages,其中包含一個用於指定訊息類型的Control 欄位和一個用於保存反序列化資料的X 欄位。

switch m.Control {
case "Foo":
    // Convert the JSON to a Foo struct
case "Bar":
    // Convert the JSON to a Bar struct
}
登入後複製
2.將 JSON 讀取到 Wrapper 結構:

使用 conn.ReadJSON 將傳入訊息反序列化到 Messages 結構中。

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
}
登入後複製

3.解析訊息類型:根據m.Control的值來判斷實際的訊息類型(Foo或Bar)。 範例程式碼:透過在 Messages 結構中使用 json.RawMessage,可以根據訊息類型動態處理反序列化的資料。此解決方案允許靈活處理具有不同結構的傳入訊息。

以上是如何使用 Gorilla Websocket 處理 Go WebSocket 中的混合 JSON 訊息類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板