当前位置: 首页 > news >正文

proto3语法

在这里插入图片描述

命令

protoc -h

protoc -h  //查看protobuf提供的命令

在这里插入图片描述

decode

  • 将二进制消息转换为文本格式

enum

  • 同级中的enum中常量不能有冲突
  • 枚举常量的值从零开始
  • 默认值为枚举常量为0
syntax="proto3";

enum PhoneType
{
    MP = 0;//移动
    TEL = 1;//固定
}

enum PhoneTypeCopy
{
    MP = 0;
}

在这里插入图片描述

//test.proto
syntax="proto3";
enum PhoneType
{
    MP = 0;
}
//test_enum.proto
syntax="proto3";
import "test.proto";
enum PhoneType
{
    MP = 0;//移动
    TEL = 1;//固定
}

//enum PhoneTypeCopy
//{
//    MP = 0;
//}

  • import引用的也不可以常量重复
    在这里插入图片描述
  • 解决方案加package
    在这里插入图片描述

在这里插入图片描述

通讯录2.1加入enum

contacts.proto

在这里插入图片描述

write.cc

在这里插入图片描述

read.cc

在这里插入图片描述

  • 效果
    在这里插入图片描述

Any

  • Any可以是任何类型
    在这里插入图片描述
    在这里插入图片描述

升级通讯录

在这里插入图片描述

  • wirte.cc
    在这里插入图片描述

  • read.cc
    在这里插入图片描述

  • 效果

在这里插入图片描述

oneof

  • contacts.proto
    在这里插入图片描述
  • write.cc
    在这里插入图片描述
  • read.cc
    在这里插入图片描述
    在这里插入图片描述
  • 效果
    在这里插入图片描述

map

  • contacts.proto
    在这里插入图片描述
  • write.cc
    在这里插入图片描述
  • read.cc
    在这里插入图片描述
  • 效果
    在这里插入图片描述

默认值

在这里插入图片描述

更新消息

更新规则

  • 新增:不和老的字段冲突就可以

  • 修改:禁止修改字段编号在这里插入图片描述

  • 删除:不建议直接删除,不使用被删除或注释的字段,使用reserved 2,100 to 200;表示2,100至200字段编号都不能被使用,否则编译的时候会报错
    在这里插入图片描述

未知字段

  • server.proto
    在这里插入图片描述

  • client.proto
    在这里插入图片描述


在这里插入图片描述

  • 起始生日字段并没有丢失,是被保留了
    在这里插入图片描述
    在这里插入图片描述

获取未知字段

在这里插入图片描述

  • 效果
    在这里插入图片描述

前后兼容性

在这里插入图片描述

  • 向前兼容:老模块能够正确识别新模块生成或发出的协议
  • 向后兼容:新模块能够正确识别老模块生成或发出的协议

option

syntax="proto3";

message PeopleInfo
{
    string name = 1;
}

在这里插入图片描述


syntax="proto3";


option optimize_for = LITE_RUNTIME;//改变了编译器的优化等级

message PeopleInfo
{
    string name = 1;
}

在这里插入图片描述


option的分类

  • 可以分为文件级,消息级和字段级
    在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

http://www.dtcms.com/a/54039.html

相关文章:

  • 修改git fetch后引用没更新
  • 1493. 删掉一个元素以后全为 1 的最长子数组
  • Redis - 核心原理深度解析:线程模型、持久化与高可用性
  • TensorFlow深度学习实战(10)——迁移学习详解
  • Swagger UI界面的使用
  • 系统架构设计师教材:数据库设计基础知识
  • 从零开始的 Kafka 学习(二)| 集群启动
  • 深入解析 Umi-OCR:高效的免费开源 OCR 文字识别工具
  • OpenCV计算摄影学(15)无缝克隆(Seamless Cloning)调整图像颜色的函数colorChange()
  • Spring实战spring-ai运行
  • fastapi+mysql实现问卷调查系统
  • DeepSeek+知识库+鸿蒙,助力鸿蒙高效开发
  • Java集合面试题(持续更新)
  • 动态规划01背包问题系列一>最后一块石头的重量II
  • Spring Boot使用JDBC /JPA访问达梦数据库
  • 安卓免费多功能工具:一站式解决 PDF 阅读、编辑、转换等需求
  • 基础算法总结
  • vue3:七、拦截器实现
  • PX4中的UAVCAN_V1的实现库libcanard与数据格式DSDL
  • 【微知】Mellanox驱动中to是什么?有哪些超时时间?(time out,心跳2s,reset 1分钟)
  • 正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-2.1 uboot简介
  • 算法-图-dijkstra 最短路径
  • Linux线程机制
  • 使用joblib 多线程/多进程
  • 锂电池升压到5V并且可以锂电池充电的芯片SM5401
  • K8S学习之基础十六:k8s中Deployment更新策略
  • AUTOSAR—TM模块介绍及使用概要
  • 深入剖析 Kubernetes 弹性伸缩:HPA 与 Metrics Server
  • 文件解析:doc、docx、pdf
  • 开发环境搭建-06.后端环境搭建-前后端联调-Nginx反向代理和负载均衡概念