亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

協議緩沖區使用枚舉

協議緩沖區使用枚舉

Go
慕容3067478 2021-12-27 15:46:02
您好,我正在使用 protobuf,但我遇到了問題。我有一些枚舉函數,但在其中我有相同的別名,當我嘗試為某種語言“go”編譯文件時,編譯器返回錯誤。我復制了 protobuf 文檔中的示例來定義枚舉,但仍然無法正常工作。enum EnumAllowingAlias {  option allow_alias = true;  UNKNOWN = 0;  STARTED = 1;  RUNNING = 1;}enum EnumNotAllowingAlias {  UNKNOWN = 0;  STARTED = 1;  // RUNNING = 1;  // Uncommenting this line will cause a compile error inside Google and a warning message outside.}這是谷歌文檔說如果你需要在一些不同的枚舉中使用相同的別名,你需要添加選項“option allow_alias = true;” 在枚舉中,但在嘗試編譯 .proto 文件后,編譯器響應。example.proto:13:5:“未知”已在“命名空間”中定義。example.proto:13:5:請注意,枚舉值使用 C++ 范圍規則,這意味著枚舉值是其類型的同級,而不是其子級。因此,“UNKNOWN”在“kluso”中必須是唯一的,而不僅僅是在“EnumNotAllowingAlias”中。example.proto:14:5:“開始”已經在“命名空間”中定義。example.proto:14:5:請注意,枚舉值使用 C++ 范圍規則,這意味著枚舉值是其類型的同級,而不是其子級。因此,“STARTED”在“kluso”中必須是唯一的,而不僅僅是在“EnumNotAllowingAlias”中。我不知道發生了什么。有人知道是什么問題嗎?
查看完整描述

3 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

allow_alias 允許您為相同的值使用兩個不同的名稱。

但是,它仍然不會允許你使用相同的名稱兩次!

在您從文檔中獲取的示例中,他們只是試圖通過將 allow_alias 設置為 true 來演示如何在相同的枚舉類型中使用 STARTED = 1 和 RUNNING = 1 。他們給出的兩個枚舉示例并不打算在同一個包中使用。

但是,如果您已經在 EnumAllowingAlias 中使用了 RUNNING,則如果它們在同一個包中,則不能在 EnumNotAllowingAlias 中再次使用 RUNNING。


查看完整回答
反對 回復 2021-12-27
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

您正在尋找的答案在錯誤消息中 :) 解析它實際告訴您的內容有點困難。

基本上,什么

枚舉值是它們類型的兄弟,而不是它的孩子

意思是,枚舉值的范圍不是MyEnum.FOOand MyEnum2.FOO,而是與 MyEnum 處于同一級別。所以同一個 .proto 文件中的兩個 enum 值不能具有相同的名稱;他們都試圖FOO在該文件中存在,而不是成為MyEnum.FOOMyEnum2.FOO。


查看完整回答
反對 回復 2021-12-27
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

我不明白你的意思,因為我有兩個名字不同的枚舉,第一個是 EnumAllowingAlias,第二個是 EnumNotAllowingAlias 這是例子

https://developers.google.com/protocol-buffers/docs/proto#enum

在他們解釋的例子之前

“您可以通過為不同的枚舉常量分配相同的值來定義別名。為此,您需要將 allow_alias 選項設置為 true,否則協議編譯器將在找到別名時生成錯誤消息?!?/p>

在這種情況下,我可以創建 2 個這樣的枚舉,編譯器應該首先使用別名創建兩個枚舉,第二個沒有別名,但編譯器在第一個答案中向我發送了錯誤。


查看完整回答
反對 回復 2021-12-27
  • 3 回答
  • 0 關注
  • 219 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號