gpt4 book ai didi

go - 如何将多个参数传递给 golang net rpc 调用

转载 作者:IT王子 更新时间:2023-10-29 01:08:28 26 4
gpt4 key购买 nike

我在 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 创建一个使用您的自定义编解码器的客户端:

https://golang.org/pkg/net/rpc/#NewClientWithCodec

关于go - 如何将多个参数传递给 golang net rpc 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51180914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com