码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Protocol Buffers语法


    官方文档:https://developers.google.cn/protocol-buffers

    文章目录

    • Protocol Buffers定义消息类型
      • 基本语法
      • 指定字段类型
      • 分配字段编号
      • 指定字段规则
      • 添加更多消息类型
      • 添加注释
      • 保留字段
      • 编译器将生成什么?
    • Protocol Buffers基本数据类型
    • Protocol Buffers默认值
    • Protocol Buffers枚举类型
    • Protocol Buffers使用其他消息类型
    • Protocol Buffers嵌套类型


    Protocol Buffers定义消息类型

    基本语法

    首先让我们看一个非常简单的例子。假设你要定义一个分页搜索请求消息格式,其中每个搜索请求都有一个查询字符串、你感兴趣的特定结果页面以及每页的多个结果。这是.proto你用来定义消息类型的文件。

    syntax = "proto3";
    
    message SearchRequest{
        string query = 1;
        int32 page_number = 2;
        int32 result_per_page = 3;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 文件的第一行指定使用的是proto3语法:如果不这样做,Protocol Buffers编译器将假定你使用的是proto2。这必须是文件的第一个非空、非注释行。

    • SearchRequest消息定义指定了三个字段(名称/值对),每一个字段用于你希望包含在此类消息中的每条数据。每个字段都有一个名称和一个类型。

    指定字段类型

    在一开始的例子中,所有字段都是标量类型:两个整数(page_number和result_per_page)和一个字符串(query)。但是你也可以为字段指定复合类型,包括枚举和其他消息类型。

    分配字段编号

    消息定义中的每个字段都有一个唯一的编号(如一开始例子中的1、2、3)。这些字段编号用于在消息二进制格式中标识您的字段,并且在使用您的消息类型后不应更改。

    请注意:

    • 1 到 15 范围内的字段编号需要一个字节进行编码,包括字段编号和字段类型(您可以在Protocol Buffer Encoding中找到更多相关信息)。
    • 16 到 2047 范围内的字段编号占用两个字节。
    • 因此,您应该为非常频繁出现的消息元素保留数字 1 到 15。
    • 请记住为将来可能添加的频繁出现的元素留出一些空间。

    您可以指定的最小字段编号是 1,最大的是 2^29 - 1,即 536,870,911。您也不能使用数字 19000 到 19999 ( FieldDescriptor::kFirstReservedNumber到 FieldDescriptor::kLastReservedNumber),因为它们是为 Protocol Buffers 实现保留的——如果您在.proto. 同样,您不能使用任何以前保留的字段编号。

  • 相关阅读:
    mysql 启动 报socket ‘/tmp/mysql.sock‘错误
    Matlab计算随模拟时间变化的热导率
    【Linux】防火墙 iptables
    SpringBoot 静态资源规则
    JAVA 虚拟机的最常见选项配置
    Leetcode 64. 最小路径和 动态规划+空间优化
    23种设计模式之创建型模式篇
    JAVA:实现Damm达姆算法(附完整源码)
    Leetcode算法题
    (数据科学学习手札139)geopandas 0.11版本重要新特性一览
  • 原文地址:https://blog.csdn.net/qq_39280718/article/details/126918183
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号