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 }
建立一個包裝結構Messages,其中包含一個用於指定訊息類型的Control 欄位和一個用於保存反序列化資料的X 欄位。
switch m.Control { case "Foo": // Convert the JSON to a Foo struct case "Bar": // Convert the JSON to a Bar struct }
使用 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 }
以上是如何使用 Gorilla Websocket 處理 Go WebSocket 中的混合 JSON 訊息類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!