首頁  >  文章  >  後端開發  >  如何修復 Go 中協定緩衝區定義中重新定義的欄位?

如何修復 Go 中協定緩衝區定義中重新定義的欄位?

王林
王林轉載
2024-02-06 11:39:04612瀏覽

如何修复 Go 中协议缓冲区定义中重新定义的字段?

問題內容

我正在使用提供者的 .proto 檔案建立 gRPC 用戶端,並且有幾個包含同名值的枚舉。

syntax = "proto3";

enum Color {
  NONE = 0;
  BLUE = 1;
}

enum Style {
  SOLID = 0;
  NONE = 1;
}

因此,當我為 .proto 檔案產生 Go 服務並嘗試運行它時,出現以下錯誤:

...\deal.pb.go:460:2: NONE redeclared in this block
...\deal.pb.go:105:2: other declaration of NONE

我嘗試在訊息內移動枚舉,例如在形狀內移動顏色,並期望這提供不同的名稱空間。但沒有用。產生的程式碼聲明了常數塊,並且訊息沒有提供我所希望的名稱間距。這適用於 C#。

const (
  NONE Shape = 0
  BLUE Shape = 1
)

關於如何解決這個問題有什麼想法嗎?


正確答案


您應該重新命名枚舉值,因為所提供程式碼中的主要問題是產生的Go 程式碼包含兩個名為NONE 的常數,其中一個來自Color 枚舉以及Style 列舉中的一個。這會導致命名衝突,因為在 go 中,產生的 protobuf 程式碼中的所有常數都存在於套件級別,使它們成為套件的全域變數。 所以,也許你可以嘗試這個:

enum Color {
  COLOR_NONE = 0;
  COLOR_BLUE = 1;
}

enum Style {
  STYLE_SOLID = 0;
  STYLE_NONE = 1;
}

以上是如何修復 Go 中協定緩衝區定義中重新定義的欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除