为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 gRPC Protobuf 中为接口创建类型?

如何在 gRPC Protobuf 中为接口创建类型?

Go
吃鸡游戏 2022-05-18 10:37:14
我们为所有微服务提供通用的身份验证服务。当我们验证请求作为响应时,我们会发送如下所示的 JSON。{    Auth: bool,    Body: interface{}}在编写 proto3 语法时,我们如何编写接口类型之类的东西?我尝试过使用 Any 类型,但我无法使用它,因为我们需要在我无法生成的类型 url 中传递消息类型。用于响应的原型消息message AuthResponse {    bool Auth = 1;    google.protobuf.Any Body = 2;}有人可以在这里帮忙吗?
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

您可以将body类型设置为bytes.


如果您的身体有一组预定义的类型,那么我建议您将Auth结构更改为如下所示:


type AuthResponse struct {

    Auth bool

    Body Encodable

}


// Encodable defines types that can be encoded into a byte slice.

type Encodable interface {

    Encode() []byte

}

然后,Encode() []byte在您的每种类型上实现。


或者,如果您的Body字段可以是任何东西,那么也许是一个类似的解决方案,除了您的Encode函数看起来像这样:


func Encode(interface{}) []byte


但是,在这种情况下,您可能必须使用一些反射魔法才能将其编码为某个字节片。你甚至可以使用JSON.


我希望这有帮助!


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号