簡體   English   中英

整數的協議緩沖區零值

[英]Protocol buffer zero value for integer

我有一個 Go 結構體,我們目前在我們的 Restful API 中使用它,它看起來像這樣:

type Req struct {
  Amount *int
}

我在這里使用指針,因為如果金額為零,則表示Amount未填充,如果金額不為零,但為零,則表示該字段已填充,但值為零。

當我們開始更改為 protofiles 並且我們想要使用它時,主 API 將請求作為 HTTP API 獲取並通過 gRPC 將其發送到下一個服務,並使用與我遇到的問題相同的proto3proto3無法生成指針為金額。 這很好,因為協議緩沖區是為在分離的系統之間發送數據而設計的,但是我如何處理上述問題,因為如果我收到請求,我無法決定金額是零還是零。

proto3不區分零和不存在; 默認值和隱式與顯式值的概念消失了:

  • 默認值始終為零(或 false 等)
  • 如果值為零,則不發送; 否則,它是

使用proto2更有可能實現您的proto2 或者,只需添加一個單獨的字段來指示您對某物有一個值:

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

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

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

(所以;沒有值,你發送一個Foo ;有值,你發送一個帶有BarFoo ,無論amountamount :它是)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM