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

Tho*_*mas 7 go websocket

我必须使用(相对)标准的围棋程序go.net/websocket库.我正在尝试接收和解码来自网页的消息,这些消息对于每种类型的消息具有不同的结构,即

{type: "messagetype", msg: { /* structure different for each message type */ } }
Run Code Online (Sandbox Code Playgroud)

有没有办法对消息进行"部分"解码,只是type在继续将实际消息解码为go结构之前检查字段?

这是否需要编写一个自定义的Codeca'la JSON,它代表消息本身的JSON编解码器?

Nic*_*ood 11

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

struct {
    type string
    msg  json.RawMessage
}
Run Code Online (Sandbox Code Playgroud)

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

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