我在go中使用网络库,我想进行RPC调用:
Client.Call(“action”,[] string {“arg1”,“arg2”}和& response)但是在JSON中我看到:
{ “方法”: “动作”, “PARAMS”: “ARG1”, “ARG2”, “ID”:0}…
Go的JSON RPC使用的编解码器 rpc.Client 将采用您发送的任何参数并将其编码为它用于参数的数组的第一个元素。
rpc.Client
因此,编码的请求将始终具有顶级数组,其中只包含一个元素,其中包含您发送的参数,如您所述。
见 WriteRequest 功能在这里:
WriteRequest
https://golang.org/src/net/rpc/jsonrpc/client.go#L57
要实现您的目标,您可以实现自定义 rpc.ClientCodec 。
rpc.ClientCodec
界面记录在这里:
https://golang.org/pkg/net/rpc/#ClientCodec
您可以在此处借用默认JSON编解码器的几乎所有实现:
https://golang.org/src/net/rpc/jsonrpc/client.go
并修改 params 要读取的请求的属性:
params
Params interface{} `json:"params"`
然后写你的 WriteRequest 基于标准的,你可以将你的参数分配给请求参数:
c.req.Params[0] = param
然后你可以使用 rpc.NewClientWithCodec 使用自定义编解码器创建客户端:
rpc.NewClientWithCodec
https://golang.org/pkg/net/rpc/#NewClientWithCodec