«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как покинуть сообщения json websocket как типы союзов в Go?

Как покинуть сообщения json websocket как типы союзов в Go?

Опубликовано в 2025-03-12
Просматривать:120

How to Deserialize JSON Websocket Messages as Union Types in Go?

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