首页 > 其他分享 >protobuf

protobuf

时间:2024-06-16 23:42:59浏览次数:9  
标签:protobuf 一个 定义 编号 类型 string

模板

syntax = "proto3"; // 指定 protobuf 的版本  
  
package example; // 定义包名  
  
// 导入其他 protobuf 文件  
import "google/protobuf/timestamp.proto";  
import "other_package/other_file.proto";  
  
// 定义一个枚举类型  
enum State {  
 UNKNOWN = 0; // 枚举值必须从 0 开始  
 STARTED = 1;  
 RUNNING = 2;  
 STOPPED = 3;  
}  
  
// 定义一个消息类型  
message Person {  
 // 定义一个字符串字段  
 string name = 1; // 字段编号必须是唯一的正整数  
  
 // 定义一个整型字段  
 int32 id = 2; // 这里的 2 是字段编号  
  
 // 定义一个布尔字段  
 bool has_pony = 3;  
  
 // 定义一个浮点字段  
 float salary = 4;  
  
 // 定义一个枚举字段  
 State state = 5;  
  
 // 定义一个重复字段(类似于列表)  
 repeated string emails = 6;  
  
 // 定义一个嵌套消息  
 message Address {  
   string line1 = 1;  
   string line2 = 2;  
   string city = 3;  
   string country = 4;  
   string postal_code = 5;  
 }  
  
 // 定义一个嵌套消息字段  
 Address address = 7;  
  
 // 定义一个 map 字段(类似于字典)  
 map<string, string> phone_numbers = 8;  
  
 // 定义一个任意类型字段  
 google.protobuf.Any any_field = 9;  
  
 // 定义一个时间戳字段  
 google.protobuf.Timestamp last_updated = 10;  
  
 // 定义一个从其他文件导入的消息类型字段  
 other_package.OtherMessage other_field = 11;  
  
 // 定义一个 oneof 字段,可以设置其中一个字段  
 oneof test_oneof {  
   string name = 12;  
   int32 id = 13;  
   bool is_test = 14;  
 }  
}  
  
// 定义一个服务  
service ExampleService {  
 // 定义一个 RPC 方法,请求类型为 GetPersonRequest 响应类型为 Person  
 rpc GetPerson(GetPersonRequest) returns (Person);  
}  
  
// 定义 GetPerson RPC 方法的请求消息类型  
message GetPersonRequest {  
 int32 person_id = 1;  
}

特别注意

  1. 字段编号一旦被分配后就不应更改,为了保持向后兼容性
  2. 编号在 [1,15] 范围内的字段编号在序列化时只占用一个字节。因此,为了优化性能,对于频繁使用的字段,尽可能使用该范围内的数字。同时也要为未来可能添加的常用字段预留一些编号(不要一股脑把 15 之内的编号都用了!)
  3. 字段号 19000,19999 是为 Protocol Buffers 实现保留的。
  4. 保留字段:如果你通过完全删除字段或将其注释来更新消息类型,则未来其他开发者对类型进行自己的更新时就有可能重用字段编号。当旧版本的代码遇到新版本生成的消息时,由于字段编号的重新分配,可能会引发解析错误或不预期的行为。为了避免这种潜在的兼容性问题,protobuf 提供 reserved 关键字来明确标记不再使用的字段编号或标识符,如果将来的开发者尝试使用这些标识符,proto 编译器将会报错提醒。
message Foo {
  reserved 2, 15, 9 to 11, 40 to max;
  // 9 to 11 表示区间 [9,11], 40 to max 表示区间 [40, 编号的最大值]
  reserved "foo", "bar";
}

标签:protobuf,一个,定义,编号,类型,string
From: https://www.cnblogs.com/cheng-sir/p/18251533

相关文章

  • 详解 Protobuf 在 C++ 下 Message、enum、Service 的使用
    这篇文章主要目的是介绍Protobuf的常用知识,包括前置声明,message,service,enum等。声明//使用proto3语法syntax="proto3";//定义一个名为Greeter的包packageGreeter;//开启生成通用服务代码的选项optioncc_generic_services=true;syntax用于提示pro......
  • 关于最新版本protobuf在Windows环境下编译失败的解决办法
    在最新版本的cmake子目录中你是看不到CMakeLists.txt文件的,所以你会遇到莫名其妙的错误。经过长时间的摸索,得出一条稳妥的解决方案:参考以下视频的protobuf版本10.在widnows中编译和部署protobuf_哔哩哔哩_bilibili即可成功。。。没必要给自己找事做.点击跳转protobuf3.......
  • 安装、学习protobuf
    Protobuf是什么?类似于json的一种数据格式,独立于语言,而且是二进制方式,所以比json更快,而且还可以直接存储一些图、树序列化和反序列化持久化(存到磁盘硬盘)领域中,数据存到磁盘叫序列化,从磁盘读取出来叫反序列化网络传输领域中,数据块转字符串叫序列化,对端把字符串解析为数据块......
  • protobuf 在嵌入式ARM平台的应用(c语言版)
    一、PC上安装protobuf和protobuf-c1.安装protobuf protocolbuffers仓库地址:https://github.com/protocolbuffers/protobuf 本文选择下载v21.12版本(太新版本protobuf-c可能不支持)$cdprotobuf-21.12$./autogen.sh$./configure#默认安装路径/usr/local/$make......
  • protobuf 和 json 互转
    common.h#ifndefCOMMON_H#defineCOMMON_H#include"google/protobuf/message.h"#include"nlohmann/json.hpp"#include"google/protobuf/util/json_util.h"usinggoogle::protobuf::util::MessageToJsonString;usingnamespacego......
  • Protobuf_动态消息-反射
    protobufprotoc版本协议文件版本message消息中承载的数据分别对应于每一个字段都有一个名字和一种类型optionalrepeated:在格式正确的消息中,此字段类型可以重复零次或多次。系统会保留重复值的顺序字段规则字段类型字段名称=字段编号[default=0];......
  • Protobuf - Designing Effective APIs
       ......
  • Protobuf_中间件的消息格式
    智驾数据华为-rtfevent系列工具,对标ros系列工具-华为的MDC资料未开放AUTOSARAP平台(AdaptivePlatform)作为智能驾驶应用的运行时环境录制回放命令行工具基于CM服务的维测功能实现,用户在MDC平台开发基于CM开发应用时,可查看、录制、回放数据,从而提高应用调测效率系统维测......
  • Windows系统编译protobuf
    在编译ncnn前,需要编译好protobuf。这篇文章将记录protobuf的编译方法。什么是protobufProtocolBuffers是一种轻量级、高效的数据交换格式,它可以用于结构化数据的序列化,适用于通信协议、数据存储等领域。优点:高效性:ProtocolBuffers生成的数据序列化后体积小,速度快。跨语......
  • Protobuf - Well-Known Types
     Any (message)Api (message)BoolValue (message)BytesValue (message)DoubleValue (message)Duration (message)Empty (message)Enum (message)EnumValue (message)Field (message)Field.Cardinality (enum)Field.Kind (enum)FieldMask (message)Fl......