protoBuf_语法

秉着讲武德的态度,本周更一更。
在这里插入图片描述
那么就接着上周的protobuf语法来开展吧,目前使用的protobuf语法有两种,分别是proto2和proto3,那么这两种语法有什么区别呢?我们下文详细来讲<长江后浪推前浪,肯定会把前浪拍在沙滩上>
emmm,首先目前如果你想要使用proto3语法那么就需要在.proto文件中的syntax中指定语法类型为proto3,否则,编译器会默认采用proto2语法
其次呢,就是在书写.proto文件中的一些区别:
1、proto3字段默认是singular,不需要显示添加
2、proto3移除了require关键字,当然在proto2的时候也不推荐使用require(但是还是可以继续使用)
3、proto3 repeated默认设置[packed = true],proto2需要显式设置
4、proto2可以使用default指定字段默认值,proto3移除default,strings默认是空字符,bool默认是false,数字类型默认是0等判断上要注意默认值,比如bool设置为false和默认值相同设为默认值,不会序列化这个字段,从而节省空间
4、proto2可以使用default指定字段默认值,proto3移除default,strings默认是空字符,bool默认是false,数字类型默认是0等判断上要注意默认值,比如bool设置为false和默认值相同设为默认值,不会序列化这个字段,从而节省空间
5、proto3枚举类型第一个值必须为0,默认值为第一个值
6、proto3移除groups,proto2也废弃groups,可以用嵌套message代替
7、proto2和proto3 version 3.5及之后的版本 解析和序列化保留未知字段, proto3 version 3.5之前的版本丢弃未知字段
8、proto3移除extensions,增加Any,Any代替extensions
9、proto3增加json映射支持
简而言之:proto3比proto2支持的语言更多,语法更简洁。去掉了复杂的语法和特性,更强调约定而弱化语法。如果你是初学者或者项目选型要使用protobuf技术的话建议直接使用proto3语法,但是如果原有系统使用的语法是proto2的话不建议进行语法版本的升级
上边哔哔了那么多,很难直观的看到是个什么球样子,下面就写一个proto3语法的demo-proto文件,使用啥的和proto2差不离,不知道的来这

// 如果使用此注释,则使用proto3; 否则使用proto2
syntax = "proto3";

// 引入外部的proto对象
import "google/protobuf/any.proto";

// 生成类的包名
option java_package = "com.demo.spring.proto";
//生成的数据访问类的类名  
option java_outer_classname = "DemoEntity";

message Demo{  
    // Message里每个成员变量都有一个唯一的数字标志(   Assigning Tags)
    int32 id = 1;//  singular, 默认值,表示成员只有0个或者1个
    string name = 2;// 
    string email = 3;//
    repeated string sons = 4; // repeated 列表
    Gender gender = 5; // Enum值
    repeated Result result = 6; // 新的对象List
    repeated google.protobuf.Any any = 7; // Any对象
    map<string, MapVaule> map = 8; // 定义Map对象

    // reserved
    reserved 12, 15, 9 to 11; // 预留将来使用的Assigning Tags,
    reserved "foo", "bar"; // 预留将来使用的filed name
} 

enum Gender {
  MAN = 0;
  WOMAN = 1;
}

// 定义一个新的对象
message Result {
  string url = 1;
  string title = 2;
  repeated string snippets = 3;
}

// 定义Map的value值
message MapVaule {
  string mapValue = 1;
}
End

上边介绍的那么多,其实要想掌握还是得TO DO,后续我会把demo的代码整理到github上(虽然现在已经有很多类似的demo代码),到时候大家可以拉到本地看看跑跑改改!🕵️‍♀️
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

new_repo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值