deserializing رسائل websocket json كنوع نقابات في go
في GO ، يتم استخدام مكتبة WebSocket عادةً لمناولة اتصالات WebSocket. ومع ذلك ، عند استخدام JSON للتسلسل والتخفيض ، فإن التعامل مع الرسائل الواردة لأنواع مختلفة يمثل تحديًا.
سلسلة `json:" a "` B String `JSON:" B "` } اكتب البنية { C String `JSON:" C "` D String `JSON:" D "` }تتيح لك وظيفة Gorilla's Conn.Readjson إخلاء رسائل JSON الواردة في بنية محددة. ومع ذلك ، ستحتاج إلى استخدام مكالمات Conn.Readjson (FOO) و Conn.Readjson (BAR) للتعامل مع رسائل من أنواع مختلفة ، والتي لا تعتبر غير فعالة ومرهقة. سلسلة التحكم `JSON:" التحكم "` x json.Rawmessage }
type Foo struct { A string `json:"a"` B string `json:"b"` } type Bar struct { C string `json:"c"` D string `json:"d"` }يشير حقل التحكم إلى نوع الحمولة النافعة ، ويحمل X بيانات json الخام. لإخراجه رسائل واردة باستخدام هذا النهج:
رسائل var m ERR: = C.Readjson (& M) إذا خطأ! = لا شيء { // خطأ الخطأ } التبديل M.Control { حالة "فو": فار فو فو if err: = json.unmarshal ([] byte (m.x) ، & foo) ؛ err! = nil { // خطأ الخطأ } // افعل شيئًا مع فو حالة "شريط": // اتبع نفس النمط لمعالجة شريط }
يتيح لك هذا الحل أن تفرد الرسائل الواردة بغض النظر عن نوعها ، باستخدام نوع واجهة Rawmessage في json.rawmessage. يتحقق عبارة التبديل من حقل التحكم لتحديد نوع الرسالة الفعلي وتجاهله وفقًا لذلك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3