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

整数的协议缓冲区零值

整数的协议缓冲区零值

Go
SMILET 2023-06-05 17:10:21
我有一个 Go 结构,我们目前在我们的 restful API 中使用它,它看起来像这样:type Req struct {   Amount *int}我在这里使用指针,因为如果金额为零,则表示未Amount填充,如果金额不为零,但为零,则表示该字段已填充,但值为零。当我们开始更改为 protofiles 并且我们想像这样使用它时,主要 API 将请求作为 HTTP API 获取,并通过 gRPC 使用我遇到的相同 protofile 将其发送到下一个服务我遇到了这个问题,无法生成proto3指针量。这很好,因为协议缓冲区是为在不同系统之间发送数据而设计的,但是我该如何处理上述问题,因为如果我收到请求,我无法确定金额是零还是零。
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

proto3不区分零和不存在;默认值和隐式与显式值的概念消失了:

  • 默认值始终为零(或 false 等)

  • 如果值为零,则不发送;否则,它是

有了proto2. 或者,只需添加一个单独的字段来表明您对某物具有价值:

message Req {

    int amount = 1;

    bool amountHasValue = 2;

}

或者使用嵌套的子消息,即


message Foo {

    Bar bar = 1;

}

message Bar {

    int amount = 1;

}

(所以;如果没有值,您只需发送一个Foo;如果有一个值,您可以发送一个Foo和一个Bar,无论它amount是什么:它是)


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信