gpt4 book ai didi

go - 整数的 Protocol Buffer 零值

转载 作者:IT王子 更新时间:2023-10-29 02:07:48 24 4
gpt4 key购买 nike

我有一个 Go 结构,我们目前在我们的 restful API 中使用的是这样的:

type Req struct {
Amount *int
}

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

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

最佳答案

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

  • 默认值始终为零(或假等)
  • 如果值为零,则不发送;否则,它是

使用 proto2 可以使您所追求的更有可能。或者,只需添加一个单独的字段来表明您对某物有值(value):

message Req {
int amount = 1;
bool amountHasValue = 2;
}

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

message Foo {
Bar bar = 1;
}
message Bar {
int amount = 1;
}

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

关于go - 整数的 Protocol Buffer 零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54516940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com