[英]Protocol buffer zero value for integer
我有一個 Go 結構體,我們目前在我們的 Restful API 中使用它,它看起來像這樣:
type Req struct {
Amount *int
}
我在這里使用指針,因為如果金額為零,則表示Amount
未填充,如果金額不為零,但為零,則表示該字段已填充,但值為零。
當我們開始更改為 protofiles 並且我們想要使用它時,主 API 將請求作為 HTTP API 獲取並通過 gRPC 將其發送到下一個服務,並使用與我遇到的問題相同的proto3
, proto3
無法生成指針為金額。 這很好,因為協議緩沖區是為在分離的系統之間發送數據而設計的,但是我如何處理上述問題,因為如果我收到請求,我無法決定金額是零還是零。
proto3
不區分零和不存在; 默認值和隱式與顯式值的概念消失了:
使用proto2
更有可能實現您的proto2
。 或者,只需添加一個單獨的字段來指示您對某物有一個值:
message Req {
int amount = 1;
bool amountHasValue = 2;
}
或者使用嵌套的子消息,即
message Foo {
Bar bar = 1;
}
message Bar {
int amount = 1;
}
(所以;沒有值,你只發送一個Foo
;有值,你發送一個帶有Bar
的Foo
,無論amount
是amount
:它是)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.