我有一个Go结构,它在我们的Restful API中目前正在使用的样子,
type Req struct {
Amount *int
}
我在这里使用指针,因为如果Amount为零,则表示Amount
未填充;如果Amount为零,但为零,则表示字段已填充,但是值为零。
当我们开始更改为原型文件并希望使用它时,主API将请求作为HTTP API并通过gRPC发送给具有我遇到问题的相同原型文件的下一个服务,通过gRPC }}无法为金额生成指针。很好,因为协议缓冲区是为在分离的系统之间发送数据而设计的,但是我该如何处理上述问题,因为如果收到请求,我将无法确定Amount为零或仅为零。
答案 0 :(得分:1)
proto3
不能区分零和零。默认值和隐式与显式值的概念消失了:
proto2
可以为您提供更多服务。另外,只需添加一个 separate 字段以表明您具有某物的值:
message Req {
int amount = 1;
bool amountHasValue = 2;
}
或使用嵌套的子消息,即
message Foo {
Bar bar = 1;
}
message Bar {
int amount = 1;
}
(因此;如果没有值,您将正义发送一个Foo
;通过一个值,您将发送一个带有Foo
的{{1}},无论{ {1}}是:是)