如何将多个参数传递给golang net rpc调用
我正在go中使用网络库,我想进行RPC调用:如何将多个参数传递给golang net rpc调用,go,rpc,Go,Rpc,我正在go中使用网络库,我想进行RPC调用: Client.Call("action", []string{"arg1", "arg2"}, &response) 但在JSON中,我看到: {"method":"action","params":[["arg1","arg2"]],"id":0} 请注意,参数用双方括号括起来 在我的情况下,我需要参数是一个简单的列表: {"method":"action","params":["arg1","arg2"],"id":0} 有没有办法
Client.Call("action", []string{"arg1", "arg2"}, &response)
但在JSON中,我看到:
{"method":"action","params":[["arg1","arg2"]],"id":0}
请注意,参数用双方括号括起来
在我的情况下,我需要参数是一个简单的列表:
{"method":"action","params":["arg1","arg2"],"id":0}
有没有办法做到这一点?Go的JSON RPC在
RPC上使用的编解码器。客户端将接收您发送的任何参数,并将其编码为用于参数的数组的第一个元素
因此,编码的请求总是有一个顶层数组,只有一个元素,其中包含您发送的参数,正如您已经指出的
请参见此处的WriteRequest
功能:
为了实现您想要的,您可以实现一个定制的rpc.ClientCodec
此处记录了接口:
您可以在此处借用默认JSON编解码器的几乎所有实现:
并将请求的params
属性修改为:
Params interface{} `json:"params"`
然后,在基于标准参数编写WriteRequest
时,只需将参数分配给请求参数:
c.req.Params[0] = param
然后,您可以使用rpc.NewClientWithCodec
使用自定义编解码器创建客户端:
谢谢。我挖到了看到c.req.Params[0]=param行的地方,看到了它的8年历史。