我有一个 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是什么:它是)
- 1 回答
- 0 关注
- 84 浏览
添加回答
举报
0/150
提交
取消