如何将多个参数传递给 golang net rpc 调用
How to pass multiple arguments to golang net rpc call
我在 go 中使用网络库,我想进行 RPC 调用:
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.Client
之上使用的编解码器将采用您发送的任何参数并将其编码为它用于参数的数组的第一个元素。
因此编码请求将始终有一个只有一个元素的顶级数组,其中将包含您发送的参数,正如您已经指出的那样。
在此处查看 WriteRequest
函数:
https://golang.org/src/net/rpc/jsonrpc/client.go#L57
要实现您想要的效果,您可以实现自定义 rpc.ClientCodec
。
接口记录在此处:
https://golang.org/pkg/net/rpc/#ClientCodec
您可以在这里借用默认 JSON 编解码器的几乎所有实现:
https://golang.org/src/net/rpc/jsonrpc/client.go
并修改请求的params
属性为:
Params interface{} `json:"params"`
然后在写你的WriteRequest
基于标准的时候,你可以把你的参数分配给请求参数:
c.req.Params[0] = param
然后您可以使用 rpc.NewClientWithCodec
使用自定义编解码器创建客户端:
我在 go 中使用网络库,我想进行 RPC 调用:
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.Client
之上使用的编解码器将采用您发送的任何参数并将其编码为它用于参数的数组的第一个元素。
因此编码请求将始终有一个只有一个元素的顶级数组,其中将包含您发送的参数,正如您已经指出的那样。
在此处查看 WriteRequest
函数:
https://golang.org/src/net/rpc/jsonrpc/client.go#L57
要实现您想要的效果,您可以实现自定义 rpc.ClientCodec
。
接口记录在此处:
https://golang.org/pkg/net/rpc/#ClientCodec
您可以在这里借用默认 JSON 编解码器的几乎所有实现:
https://golang.org/src/net/rpc/jsonrpc/client.go
并修改请求的params
属性为:
Params interface{} `json:"params"`
然后在写你的WriteRequest
基于标准的时候,你可以把你的参数分配给请求参数:
c.req.Params[0] = param
然后您可以使用 rpc.NewClientWithCodec
使用自定义编解码器创建客户端: