Protobuf语法

本文介绍了Protocol Buffers(Protobuf)的语法,包括协议类型、注释写法、数据结构和字段规则(required、optional、repeated)。详细阐述了各种数据类型,如浮点数、整型,并讲解了如何定义枚举、Message的嵌套以及如何使用package避免命名冲突。同时对比了proto2和proto3的主要区别,如字段规则的变化和新增的编程语言支持。

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

协议类型

syntax = "proto2"; 这个分号容易掉

注释写法

//注释

数据结构

message StructName{ //这个大括号在这里在VS中会有语法高亮**
	//字段规则 字段类型 字段名 字段标识号
	required string name = 1; //每次分号结尾
	repeated int32 array_value = 2; //定义了一个动态数组,元素类型时int32 
}

字段规则

required

标识该值是必须要设置的,一个格式良好的消息,一定要包含至少一个这种字段

optional

可以不用设置,如果不设置就不会编码进去,解析时没有的话使用默认值

repeated

在一个格式良好的消息中,这种字段可以重复任意多次(包括0次)。重复的值的顺序会被保留。表示该值可以重复,相当于java中的List,C++中的vector

数据类型

double
浮点数
float
单精度浮点数
int32
int类型,使用可变长编码,编码负数不够高效,有负数,推荐使用sint32
sint32
可变长编码 有符号整性 比通常int32高效
uint32
无符号整数 可变长编码
int64 long long
使用可变长编码方式。编码负数时不够高效——如果有负数,可以使用sint64;
sint64 long long
使用可变长编码方式。有符号的整型值。编码时比通常的int64高效;
uint64
无符号整数 使用可变长编码方式;
fixed32
总是4个字节。如果数值总是比总是比2 ^ 28大的话,这个类型会比uint32高效。
fixed64
总是8个字节。如果数值总是比总是比2 ^ 56大的话,这个类型会比uint64高效。
sfixed32
总是4个字节。
sfixed64
总是8个字节。
bool :
bool值
string :
一个字符串必须是UTF - 8编码或者7 - bit ASCII编码的文本。
bytes :
可能包含任意顺序的字节数据。类似java的ByteString以及 c++ string;

定义枚举

直接在proto文件中:

enum EnumName{
    EnumValue = 1;	
}

EnumName类型可以在类型定义时使用

required EnumName type = 1;

Message的嵌套

message M1{
}
message M2{
	required M1 m = 1;
}

package_避免命名冲突

package myPackage;

proto2与proto3区别

  1. 字段规则移除“required",”optional“改为”singular"
  2. 增加Go,Ruby,JavaNano支持
  3. 移除default选项,字段默认值根据类型由系统决定
  4. 枚举类型第一个字段必须为0
  5. 其他,略
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值