我需要将json rpc消息包装在go结构中这是我的第一个想法,适用于这样的传出消息
// Message wrapper
type Message struct {
ID *string `json:"id,omitempty"`
JSONRPC string `json:"jsonrpc"`
Method *string `json:"method,omitempty"`
Params *interface{} `json:"params,omitempty"`
Result *interface{} `json:"result,omitempty"`
}
// NewNotification creates a RPC Notification
func NewNotification(method string, params interface{}) Message {
m := Message{}
m.JSONRPC = "2.0"
m.Method = &method
m.Params = ¶ms
return m
}
type Test struct {
A string `json:"a"`
B string `json:"b"`
}
t := Test{"abc", "def"}
m := NewNotification("testMethod", t)
socket.WriteJSON(m)
但是现在对于接收方向,我对Params *interface{}
声明。
我通过Params
字段识别Method
有效负载类型,并希望将Params
解组到该结构...但是因此我需要类型json.RawMessage
可以使Params
正常工作。
我不想定义MessageIn
和MessageOut
结构!
m := Message{}
socket.ReadJSON(m)
t := Test{}
json.Unmarshal(m.Params, &t)
您应将json.RawMessage
用作参数和结果字段的类型。这将延迟这些字段的解码,直到您知道接收端的方法是什么。查阅文档和示例:相同的用例:https://golang.org/pkg/encoding/json/#RawMessage
[好吧,这个想法有MessageIn
和MessageOut
结构,但它们共享Message
的共同部分。这样,可以让WriteJson在发送方向上进行编组。当方法和假定的有效载荷类型已知时,必须手动完成接收解组。