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

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

王林
發布: 2024-02-06 11:39:04
轉載
671 人瀏覽過

如何修复 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板