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编码

相关文章
相关标签/搜索