相关疑难解决方法(0)

协议缓冲区 - 唯一编号标记 - 澄清?

我正在使用协议缓冲区,一切正常.除了我不明白的事实 - 为什么我需要proto文件中的编号标签:

message SearchRequest {
  required string query = 1;
  optional int32 page_number = 2;
  optional int32 result_per_page = 3;
}
Run Code Online (Sandbox Code Playgroud)

当然,我已经阅读了文档:

如您所见,消息定义中的每个字段都有一个唯一的编号标记.这些标记用于以消息二进制格式标识字段,并且在使用消息类型后不应更改.

我不明白如果我改变它会有什么不同.(我将创建一个新的原型并编译它 - 所以它为什么关心?)

另一篇文章指出:

原型定义中的编号字段消除了对版本检查的需要,这是对协议缓冲区的设计和实现的明确说明的动机之一.正如开发人员文档所述,协议的设计部分是为了避免像这样检查协议版本的"丑陋代码":

if (version == 3) {
  ...
} else if (version > 4) {
  if (version == 5) {
    ...
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

题

它只是我还是完全不清楚?

让我以不同的方式问它:

如果我有一个类似上述文件的proto文件,然后我将其更改为:

message SearchRequest {
  required string query = 3; //reversed order
  optional int32 page_number = 2;
  optional int32 result_per_page = 1;
} …
Run Code Online (Sandbox Code Playgroud)

protocol-buffers

26
推荐指数
2
解决办法
6860
查看次数

标签 统计

protocol-buffers ×1