如何处理以数组作为返回值的 go RPC 调用?

Posted

技术标签:

【中文标题】如何处理以数组作为返回值的 go RPC 调用?【英文标题】:How to deal with go RPC calling with an array as its return value? 【发布时间】:2020-04-29 02:22:55 【问题描述】:

我想将我的服务导出为 RPC 服务,我的本地方法是从 db 中获取所有用户(结构类型),如下所示,

func GetUsers() ([]model.User) 
    // business logic

现在我将方法包装为 RPC 模式,如下所示,

func (api *API) RpcGetUsers(_, reply []*model.User) error 
    reply = dal.GetUsers()
    return nil

但是当我运行该函数时,发生了恐慌。它提到了

“方法“RpcGetUsers”的回复类型不是指针:“[]*model.User””

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

RPC 文档说该方法必须如下所示:

func (t *T) MethodName(argType T1, replyType *T2) error

所以你需要一个请求和一个回复类型。你可以这样做:

type Empty struct
type Users struct 
   Users []model.User


func (api *API) RpcGetUsers(_ *Empty, reply *Users) error 
...

【讨论】:

谢谢你的建议我会试试的

以上是关于如何处理以数组作为返回值的 go RPC 调用?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理以编程方式添加的按钮事件? C#

如何处理以保留 Sql 关键字命名的表列?

C# 如何处理以编程方式创建的 ColorAnimation 和 Storyboard?

如何处理以设置间隔卸载组件以避免内存泄漏

如何处理 API 有时将属性作为数组返回,有时作为对象返回?

Go语言闭包