我在 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
。
接口(interface)记录在这里:
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 - 如何将多个参数传递给 golang net rpc 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51180914/