Protobuf 语法详解

news2024/12/23 9:05:38

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁
🦄 博客首页——猫头虎的博客🎐
🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐

🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

文章目录

  • Protobuf 语法详解
      • 摘要
      • 导语
      • 引言
    • 1. 文件格式
    • 2. 版本设定
    • 3. 注释
    • 4. 与 Java 语言相关的语法
    • 5. 逻辑包
    • 6. 导入
    • 7. 基本类型
    • 8. 枚举
    • 9. 消息 Message
    • 10. 服务
      • 总结
      • 参考资料
  • 原创声明

Protobuf 语法详解

在这里插入图片描述

Protobuf,全称 Protocol Buffers,是 Google 开发的一种数据序列化协议。相比于 JSON、XML 等数据格式,它更小、更快、更简单。下面是 Protobuf 的一些基本语法和使用方法。

摘要

本文详细介绍了 Protocol Buffers(Protobuf)的基本语法和使用方法,涵盖了文件格式、版本设定、注释、与Java语言的相关配置、逻辑包、导入、基本类型、枚举、消息、以及服务等核心内容。

导语

Protocol Buffers,简称 Protobuf,是 Google 开发的一种高效的数据序列化协议。相比于 JSON、XML,它更小、更快、更简单。本文将为您展开 Protobuf 的语法世界,助您更好地理解和应用它。

引言

在数据传输和存储的领域,效率和简洁性是关键。Protobuf 作为一种现代的序列化工具,为开发者提供了一个高效、简洁、跨语言的解决方案。它的语法简单明了,功能强大,是许多大型系统和应用的首选。

1. 文件格式

Protobuf 的文件通常使用 .proto 作为文件扩展名。例如:

  • UserService.proto
  • OrderService.proto

2. 版本设定

Protobuf 支持多个版本,但最常用的是 proto3。设定版本的方式如下:

syntax = "proto3";

3. 注释

Protobuf 支持两种注释方式:

  1. 单行注释://
  2. 多行注释:/* */

4. 与 Java 语言相关的语法

当使用 Protobuf 生成 Java 代码时,可以通过以下选项进行配置:

  • 是否生成单个 Java 文件或多个文件:

    option java_multiple_files = false;
    
  • 指定生成的 Java 类所在的包:

    option java_package = "com.suns";
    
  • 指定生成的外部类的名称(这个外部类会包含所有的内部类):

    option java_outer_classname = "UserServce";
    

5. 逻辑包

逻辑包用于 Protobuf 文件内容的管理:

package xxx;

6. 导入

在一个 .proto 文件中,可以导入其他 .proto 文件:

import "xxx/UserService.proto";

例如,OrderService.proto 可能会导入 UserService.proto

7. 基本类型

Protobuf 支持多种基本数据类型,例如 int32、string、bool 等。具体的类型列表可以参考官方文档或上述提供的图片。

在这里插入图片描述

8. 枚举

在 Protobuf 中,可以定义枚举类型:

enum SEASON{
   SPRING = 0;
   SUMMER = 1;
}

注意:枚举的值必须从 0 开始。

9. 消息 Message

消息是 Protobuf 中的核心概念,用于定义数据结构:

message LoginRequest {
   string username = 1;
   singular string password = 2;
   int32  age = 3;
}

消息中的字段有编号,这些编号用于在二进制格式中识别字段。编号范围是从 1 到 (2^{29}-1),但 19000 到 19999 是保留的,不能使用。

消息可以嵌套,也可以使用 oneof 关键字表示只能选择其中一个字段。

10. 服务

在 Protobuf 中,可以定义服务,这在 gRPC 中尤为重要:

service HelloService{
   rpc hello(HelloRequest) returns(HelloResponse){}
}

服务中可以定义多个方法,这为构建 RPC 服务提供了便利。


以上就是 Protobuf 的基本语法和使用方法的简要介绍。如果需要深入了解,建议查阅官方文档或相关的教程。

总结

Protobuf 提供了一种简洁而高效的方式来定义和处理结构化数据。通过本文,我们了解了它的基本语法和使用方法,从文件格式到服务定义,每一个细节都为我们展示了 Protobuf 的强大和灵活。无论是在大型系统中的数据交换,还是在微服务架构中的 RPC 通信,Protobuf 都是一个值得考虑的优秀选择。

参考资料

  1. Google Developers. Protocol Buffers. https://developers.google.com/protocol-buffers
  2. Protobuf GitHub Repository. https://github.com/protocolbuffers/protobuf
  3. gRPC. https://grpc.io/

在这里插入图片描述

原创声明

======= ·

  • 原创作者: 猫头虎

作者wx: [ libin9iOak ]

学习复习

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/914255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatisplus批量写入

1.新建MybatisPlusConfig /*** MybatisPlusConfig.*/ Configuration MapperScan("com.test.mapper") public class MybatisPlusConfig {/*** 自定义批量插入 SQL 注入器.*/Beanpublic InsertBatchSqlInjector insertBatchSqlInjector() {return new InsertBatchSqlI…

微服务(多级缓存)

多级缓存 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: 请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈Redis缓存失效时&…

【Kubernetes】Kubernetes的监控工具Promethues

Prometheus 一、Prometheus 概念1. Prometheus 概述2. Prometheus 的监控数据3. Prometheus 的特点4. Prometheus 和 zabbix 区别5. Prometheus 的生态组件5.1 Prometheus server5.2 Client Library5.3 Exporters5.4 Service Discovery5.5 Alertmanager5.6 Pushgateway5.7 Graf…

【PHP面试题81】php-fpm是什么?它和PHP有什么关系

文章目录 🚀一、前言,php-fpm是什么🚀二、php-fpm与PHP之间的关系🚀三、php-fpm解决的问题🔎3.1 进程管理🔎3.2 进程池管理🔎3.3 性能优化🔎3.4 并发处理 🚀四、php-fpm常…

每日一题——排序链表(递归 + 迭代)

排序链表(递归 迭代) 题目链接 注:本体的解法建立在归并排序的基础之上,如果对这一排序还不太了解,建议看看: 👉归并排序 👉八大排序算法详解 👉合并两个有序链表 既…

初学Zephyr系统,相关文档参考

https://docs.zephyrproject.org/3.0.0/reference/kconfig/index-all.html Zephyr下所有配置项Configuration Options 链接如上,写个博客防止自己找不到 我在调试NCS中的例程的时候会需要对prj.conf进行配置从而对Kconfig进行配置 BLE的相关API可参考https://do…

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务 Intel DevCloud for oneAPI 和 Intel Optimization for PyTorch基于BERT预训练模型的英文文本蕴含任务语料介绍数据集构建 模型训练 结果参考资料 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0…

Spring@Scheduled定时任务接入XXL-JOB的一种方案(基于SC Gateway)

背景 目前在职的公司,维护着Spring Cloud分布式微服务项目有25个。其中有10个左右微服务都写有定时任务逻辑,采用Spring Scheduled这种方式。 Spring Scheduled定时任务的缺点: 不支持集群:为避免重复执行,需引入分…

基于jeecg-boot的flowable流程加签功能实现

更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H5) : http://122.227.135.243:9888 今天我…

【C++】C++ 引用详解 ① ( 变量的本质 - 引入 “ 引用 “ 概念 | 引用语法简介 | 引用做函数参数 | 复杂类型引用做函数参数 )

文章目录 一、变量的本质 - 引入 " 引用 " 概念1、变量的本质 - 内存别名2、引入 " 引用 " 概念 - 已定义变量的内存别名3、" 引用 " 的优点 二、引用语法简介1、语法说明2、代码示例 - 引用的定义和使用 三、引用做函数参数1、普通引用必须初始…

minikube安装

minikube也是需要docker环境的,首先看一下docker 下载docker.repo源到本地 通过repo里面查找最新的docker 开始安装docker 修改docker 下载加速地址, systemctl deamon-reload 下载minikube minikube start | minikube curl -LO https://storage.goog…

Mybatis(二)映射文件配置与动态SQL

Mybatis(二)映射文件配置 1.Mybatis映射文件配置 1.入参 1.1.parameterType(了解) CRUD标签都有一个属性parameterType,底层的statement通过它指定接收的参数类型。入参数据有以下几种类型:HashMap,基本数据类型&a…

会计资料基础

会计资料 1.会计要素及确认与计量 1.1 会计基础 1.2 六项会计要素小结 1.3 利润的确认条件 1.3.1 利润的定义和确认条件 1.4 会计要素及确认条件 2.六项会计要素 2.1 资产的特征及其确认条件 这部分资产可以给企业带来经济收益,但是如果不能带来经济利益&#xff…

提升团队合作效率:企业网盘的文件管理和协作利用方法

随着信息技术的飞速发展,企业越来越依赖于网络和云服务来提高工作效率。在这样的背景下,企业网盘作为一种重要的在线存储和协作工具,正在被越来越多的企业所采用。本文将探讨如何利用企业网盘进行文件管理和协作,从而构建高效的团…

Windows快捷键常用介绍,提高工作(摸鱼)效率

一:背景 本文主要是讲解Windows电脑常见的快捷键,包括ctrl快捷键,win快捷键,不管是开发人员还是普通办公人员,都是很方便的。我们平时没事操作都是用鼠标去选择对应的功能,或者在我的电脑--控制面板寻找&a…

把matlab的m文件打包成单独的可执行文件

安装Matlab Compiler Adds-on在app里找到Application Compiler 选择要打包的文件matlab单独的运行程序的话需要把依赖的库做成runtime. 这里有两个选项. 上面那个是需要对方在联网的情况下安装, 安装包较小.下面那个是直接把runtime打包成安装程序, 大概由你的程序依赖的库的多…

谷粒商城环境搭建一:Docker容器部署

Docker容器部署 VMware虚拟机安装 参考:VMware虚拟机安装Linux教程 Docker安装 Linux安装Docker # 1.更新apt包索引 sudo apt-get update# 2.安装以下包以使apt可以通过HTTPS使用存储库(repository) sudo apt-get install -y apt-transpor…

滑动窗口介绍

1.基本概念 利用单调性,使用同向双指针,两个指针之间形成一个窗口 子串与子数组都是连续的一段子序列时不连续的 2.为什么可以用滑动窗口? 暴力解决时发现两个指针不需要回退(没必要回退,一定不会符合结果&#xf…

什么是有效的预测性维护 ?

在现代制造业的背景下,设备的可靠性和生产效率成为了企业追求的关键目标。而预测性维护(Predictive Maintenance,简称PdM)作为一种先进的维护策略,逐渐成为了实现这些目标的重要工具。然而,什么是有效的预测…

2023年国赛数学建模思路 - 案例:随机森林

文章目录 1 什么是随机森林?2 随机深林构造流程3 随机森林的优缺点3.1 优点3.2 缺点 4 随机深林算法实现 建模资料 ## 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林&#xff…