【发布时间】:2020-05-22 14:57:30
【问题描述】:
我需要将 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{} 声明。
我通过Method 字段识别Params 有效负载类型并希望
将Params 解组到该结构...但因此我需要类型
json.RawMessage Params 让这个工作。
我不想定义 MessageIn 和 MessageOut 结构!
m := Message{}
socket.ReadJSON(m)
t := Test{}
json.Unmarshal(m.Params, &t)
【问题讨论】:
-
尝试预先声明一个目标类型的实例:
var mesg json.RawMessage; var params interface{} = &mesg; Test{Params: &params}
标签: go marshalling