daserializing json websocketメッセージは、go
in goのユニオンタイプとして、Gorilla websocketライブラリは、一般的にWebsocket Connectionsの処理に使用されます。ただし、JSONをシリアル化と降下に使用する場合、さまざまなタイプの受信メッセージを処理することは課題を提示します。 文字列 `json:" a "` b string `json:" b "` } タイプbar struct { c string `json:" c "` d string `json:" d "` }gorillaのconn.readjson関数を使用すると、着信JSONメッセージを特定の構造に脱却することができます。ただし、個別のconn.readjson(foo)とconn.readjson(bar)の呼び出しを使用する必要があります。これは、非効率的で面倒です。 コントロール文字列 `json:"コントロール "` x json.rawmessage }
制御フィールドはペイロードのタイプを示し、xは生のJSONデータを保持します。このアプローチを使用して入ってくるメッセージを降らせるには:
type Foo struct { A string `json:"a"` B string `json:"b"` } type Bar struct { C string `json:"c"` D string `json:"d"` }var m message err:= c.readjson(&m) err!= nil { //エラーを処理します } Switch M.Control { ケース「フー」: var foo foo err:= json.unmarshal([] byte(m.x)、&foo); err!= nil { //エラーを処理します } // fooで何かをします ケース「バー」: //ハンドリングバーの同じパターンに従ってください }
このソリューションにより、json.rawmessageのrawmessageインターフェイスタイプを使用して、タイプに関係なく、着信メッセージをゆるくすることができます。 Switchステートメントは、制御フィールドをチェックして実際のメッセージタイプを決定し、それに応じてDeserializeです。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3