【问题标题】:How can you decode multiple message types with golang websockets?如何使用 golang websockets 解码多种消息类型?
【发布时间】:2026-01-05 16:45:02
【问题描述】:

我有一个使用(相对)标准 go.net/websocket‎ 库的 go 程序。我正在尝试从网页接收和解码每种类型的消息具有不同结构的消息,即

{type: "messagetype", msg: { /* structure different for each message type */ } }

有没有办法对消息进行“部分”解码,只检查 type 字段,然后再将实际消息解码为 go 结构?

这是否需要编写一个自定义的Codec,a'la JSON,将消息本身委托给 JSON 编解码器?

【问题讨论】:

    标签: websocket go


    【解决方案1】:

    使用json.RawMessage延迟解码,例如

    struct {
        type string
        msg  json.RawMessage
    }
    

    json.RawMessage[]byte 的别名,您可以根据需要进一步解码。

    【讨论】:

    • 谢谢!我几乎放弃了,但我真的很讨厌我需要使用反射或尝试/捕获不同的解组的想法。这好多了。
    最近更新 更多