json.RawMessage を使用して Go Websocket で複数の JSON メッセージ タイプを効率的に逆シリアル化する方法

Patricia Arquette
リリース: 2024-11-24 03:51:14
オリジナル
898 人が閲覧しました

How to Deserialize Multiple JSON Message Types Efficiently in Go Websocket Using json.RawMessage?

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 サイトの他の関連記事を参照してください。

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