Protocol Buffers 學習(3):枚舉類型

首先咱們看一個枚舉類型的例子

message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 result_per_page = 3;
  enum Corpus {
    UNIVERSAL = 0;
    WEB = 1;
    IMAGES = 2;
    LOCAL = 3;
    NEWS = 4;
    PRODUCTS = 5;
    VIDEO = 6;
  }
  Corpus corpus = 4;
}複製代碼

Corpus是一個枚舉類型,而且枚舉的第一個常量映射爲0,每一個枚舉必須包含一個常量,0必須是第一個元素javascript

這樣有兩個好處java

  • 0正好是數字類型的默認值
  • 0始終做爲第一個元素,這樣能夠和proto2兼容

值重複問題

你能夠爲不一樣的枚舉常量賦相同的值,可是要設置allow_aliastruegoogle

enum EnumAllowingAlias {
  option allow_alias = true;
  UNKNOWN = 0;
  STARTED = 1;
  RUNNING = 1;
}
enum EnumNotAllowingAlias {
  UNKNOWN = 0;
  STARTED = 1;
  // RUNNING = 1; // 取消這行的註釋 會報錯
}複製代碼

更多說明

  • 枚舉常量必須在32位整數範圍內,由於枚舉值線上使用varint編碼,因此負值無效,不推薦在枚舉中定義負值
  • 反序列化的時候,消息將保留不能識別的枚舉值

更多信息請參考Google編碼

相關文章
相關標籤/搜索