Golang で異なる構造を持つ受信 WebSocket JSON メッセージを処理する方法

Susan Sarandon
リリース: 2024-11-16 17:17:03
オリジナル
997 人が閲覧しました

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

Golang を使用した受信 WebSocket JSON メッセージの処理

WebSocket 通信では、JSON データのシリアル化と逆シリアル化が重要です。 Go では、ゴリラ Websocket ライブラリは、JSON メッセージを送受信するための便利な方法を提供します。ただし、複数の構造体を扱う場合、それらの型を決定することが困難になる可能性があります。

このシナリオを処理するには、以下のような汎用メッセージ構造の使用を検討してください。

type Messages struct {
  Control string `json:"control"`
  X json.RawMessage
}
ログイン後にコピー

この構造では、Controlは受信メッセージのタイプを指定します。一方、X は実際のデータを保持できる型なしフィールドです。

受信メッセージを処理するには、次の手順に従います。

  1. 読み取りメッセージを Messages 構造体に追加します:

    var m Messages
    err := c.ReadJSON(&m)
    if err != nil {
        // handle error
    }
    ログイン後にコピー
  2. 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート