猿问

整数的协议缓冲区零值

我有一个 Go 结构,我们目前在我们的 restful API 中使用它,它看起来像这样:

type Req struct {
  Amount *int}

我在这里使用指针,因为如果金额为零,则表示未Amount填充,如果金额不为零,但为零,则表示该字段已填充,但值为零。

当我们开始更改为 protofiles 并且我们想像这样使用它时,主要 API 将请求作为 HTTP API 获取,并通过 gRPC 使用我遇到的相同 protofile 将其发送到下一个服务我遇到了这个问题,无法生成proto3指针量。这很好,因为协议缓冲区是为在不同系统之间发送数据而设计的,但是我该如何处理上述问题,因为如果我收到请求,我无法确定金额是零还是零。


SMILET
浏览 90回答 1
1回答

小唯快跑啊

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是什么:它是)
随时随地看视频慕课网APP

相关分类

Go
我要回答