我正在使用提供者的 .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中文網其他相關文章!