WebSocket 通信では、JSON データのシリアル化と逆シリアル化が重要です。 Go では、ゴリラ Websocket ライブラリは、JSON メッセージを送受信するための便利な方法を提供します。ただし、複数の構造体を扱う場合、それらの型を決定することが困難になる可能性があります。
このシナリオを処理するには、以下のような汎用メッセージ構造の使用を検討してください。
type Messages struct { Control string `json:"control"` X json.RawMessage }
この構造では、Controlは受信メッセージのタイプを指定します。一方、X は実際のデータを保持できる型なしフィールドです。
受信メッセージを処理するには、次の手順に従います。
読み取りメッセージを Messages 構造体に追加します:
var m Messages err := c.ReadJSON(&m) if err != nil { // handle error }
Control の値に基づいて、データ型を決定します:
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
By json.RawMessage を利用すると、複数のデータ型を柔軟に処理できるようになります。このアプローチにより、指定されたタイプに基づいて受信メッセージを動的に逆シリアル化できます。
以上がGolang で異なる構造を持つ受信 WebSocket JSON メッセージを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。