Deserialization JSON WebSocket Assocke As Tipes в go
в Go, библиотека Gorilla Websocket обычно используется для обработки соединений WebSocket. Однако при использовании JSON для сериализации и десериализации обработка входящих сообщений различных типов представляет проблему. Строка `json:" a "` B Строка `json:" b "` } Тип Bar struct { C String `json:" c "` D String `json:" D "` }
функция Gorilla's Conn.readJson позволяет вам детериализовать входящие сообщения JSON в определенные структуры. Однако вам нужно будет использовать отдельные вызовы Conn.readjson (Foo) и Conn.readjson (bar) для обработки сообщений различных типов, которые являются неэффективными и обременительными.
type Foo struct { A string `json:"a"` B string `json:"b"` } type Bar struct { C string `json:"c"` D string `json:"d"` }Строка управления `json:" control "` X json.rawmessage }
поле управления указывает тип полезной нагрузки, а X содержит необработанные данные JSON. Чтобы десериализовать входящие сообщения, используя этот подход:
var m Сообщения err: = c.readjson (& m) Если ошибка! = nil { // Ошибка обработки } Switch M.Control { дело "foo": var foo foo if err: = json.unmarshal ([] byte (m.x), & foo); err! = nil { // Ошибка обработки } // Сделай что -нибудь с Фу дело "Бар": // Следуйте тому же шаблону для обработки бара }
type Messages struct { Control string `json:"control"` X json.RawMessage }это решение позволяет вам дезиализировать входящие сообщения независимо от их типа, используя тип интерфейса rawmessage in json.rawmessage. Оператор Switch проверяет поле управления, чтобы определить фактический тип сообщения и соответствующим образом Deserialize.
]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3