如何使用golang websockets解码多个消息类型?

9

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

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

有没有办法对消息进行“部分”解码,即在进入将实际消息解码为 Go 结构之前仅检查 type 字段?

这是否需要编写自定义的 Codec,类似于 JSON,以委托 JSON Codec 对消息本身进行解码?

1个回答

15

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

struct {
    type string
    msg  json.RawMessage
}

json.RawMessage 是一个 []byte 的别名,你可以按照你的需求进一步解码。


2
谢谢!我差点放弃了,但我真的不喜欢使用反射或尝试/捕获不同的解组。这样做好多了。 - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接