protobuf v3测试

本文对比了Protobuf v3与v2版本的主要差异,介绍了v3版本中新增的支持如map数据类型、简化字段标记等特性,并通过示例展示了两个版本间的兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:http://blog.youkuaiyun.com/menggucaoyuan/article/details/43603829

谷歌最近发布了 v3 版本的 protobuf,以前的 protobuf 被称之为 v2,二者之间的区别其特点见我上一篇 blog《protobuf一些注意事项》

个人以为 v3 要比 v2 好处就在于:简洁,且二者的新版本都共同支持了新的数据类型:map。相比 v2,它去掉了 required 等选项,只保留了 repeated 选项,还添加了时间等比较常用的数据类型(当然暂时还没有实现)等等。唯一的缺点就是,v3 还没有发布 beta 版,目前的版本是 protobuf-3.0.0-alpha-1。

为了测试 v3 对 v2 的兼容性,我写了一个程序,v2 的协议内容如下:

syntax = "proto2";

package proto3_proto;

message Message {
  enum Humour {
    UNKNOWN = 0;
    PUNS = 1;
    SLAPSTICK = 2;
    BILL_BAILEY = 3;
  }
  optional string name = 1;
  optional Humour hilarity = 2;
  optional uint32 height_in_cm = 3;
  optional bytes data = 4;
  optional int64 result_count = 7;
  optional bool true_scotsman = 8;
  optional float score = 9;
  repeated uint64 key = 5 [packed = true];
  // repeated uint64 key = 5;
}

message MessageArray {
   map<string, Message> msg_map = 1;
}

上面的协议内容基本上把 protobuf 各种数据类型都包括了,下面是对应的 v3 版本协议:

syntax = "proto3";

package proto3_proto;

message Message {
  enum Humour {
    UNKNOWN = 0;
    PUNS = 1;
    SLAPSTICK = 2;
    BILL_BAILEY = 3;
  }
  string name = 1;
  Humour hilarity = 2;
  uint32 height_in_cm = 3;
  bytes data = 4;
  int64 result_count = 7;
  bool true_scotsman = 8;
  float score = 9;
  repeated uint64 key = 5[packed = true];
}

message MessageArray {
   map<string, Message> msg_map = 1;
}

v3 的协议内容看着比 v2 清爽一些。 写了一个测试程序,其内容就不列出来了,我放在了百度网盘,感兴趣的自己去下载。只要是 v3 没有改变 v2 的部分,二者编码后的内容是一致的。

待 v3 的 stable 版本发布出来时候,它可能就开始支持时间等一些常用类型了,据说还可以把内容序列化为 json 格式,到时候再把更新本篇的内容。


您可以通过以下步骤下载protobuf: 1. 首先,您需要访问protobuf的官方网站(https://developers.google.com/protocol-buffers)。 2. 在官方网站上,您可以找到protobuf的最新版本。点击下载链接,您将获得一个.tar.gz文件。 3. 引用\[1\]中提供了一个示例命令来解压和安装protobuf。您可以使用类似的命令来完成安装。首先,使用tar命令解压缩.tar.gz文件,然后进入解压后的目录。接下来,运行./configure命令进行配置,指定安装路径。然后,使用make命令编译protobuf,并使用make check命令运行测试。最后,使用sudo make install命令将protobuf安装到系统中。 4. 安装完成后,您可以在GOPATH目录下的src目录中找到protobuf的编译器插件protoc-gen-go。这个插件可以通过执行protoc命令自动调用。您可以使用protoc命令将.proto文件编译成对应语言的文件,以便进行使用。引用\[2\]提供了关于如何使用protobuf的更多信息。 5. 引用\[3\]中提到protobuf是一种适合高性能、对响应速度有要求的数据传输场景的数据格式。它具有序列化后体积小、支持跨平台多语言、消息格式升级和兼容性好、序列化反序列化速度快等优势。 希望这些信息对您有帮助! #### 引用[.reference_title] - *1* [ProtoBuf下载和安装(Linux)](https://blog.youkuaiyun.com/liudi_ly/article/details/103275935)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [protobuf 下载 使用](https://blog.youkuaiyun.com/php12345679/article/details/124951583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值