Go Websocket: json.RawMessage を使用した複数の JSON メッセージ タイプの逆シリアル化
Gorilla WebSocket を使用する場合、複数のタイプの受信 JSON メッセージを処理する課題を提示することができます。タイプごとに ReadJSON メソッドを個別に使用するのは面倒な場合があります。この記事では、json.RawMessage タイプを利用して逆シリアル化を効率的に処理するソリューションについて説明します。
問題:
受信した JSON メッセージを、複数の ReadJSON を使用せずに、JSON 内のコントロール フィールド呼び出し?
解決策:
実際のデータの型を示す Control フィールドと保持する json.RawMessage 型の X フィールドを持つラッパー構造体 Messages を定義します。シリアル化されたデータ。
type Messages struct { Control string `json:"control"` X json.RawMessage `json:"X"` }
受信した JSON メッセージをメッセージにアンマーシャルします。 struct.
var m Messages err := c.ReadJSON(&m)
Control フィールドを調べて、データの実際のタイプを判断します。 X フィールドを適切な構造体にアンマーシャリングします。
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 }
json.RawMessage を使用すると、さまざまなタイプの受信メッセージを逆シリアル化する一般的なアプローチが可能になり、WebSocket アプリケーションでの複数のメッセージ タイプの処理が簡素化されます。
以上がjson.RawMessage を使用して Go Websocket で複数の JSON メッセージ タイプを効率的に逆シリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。