Protobuf 语法详解

简介: Protobuf 语法详解

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁

🦄 博客首页——猫头虎的博客🎐

🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺

🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐

🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐

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

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技术核心学习团队。一起探索科技的未来,共同成长。


目录
相关文章
|
6月前
|
Java 编译器 API
protobuf万字语法详解
当用protocol buffer编译器来运行.proto文件时,编译器将生成所选择语言的代码,这些代码可以操作在.proto文件中定义的消息类型,包括获取、设置字段值,将消息序列化到一个输出流中,以及从一个输入流中解析消息。
69 0
protobuf万字语法详解
|
编解码 Java 编译器
【Protobuf】Protobuf中的Message语法规范
在Message中定义一个或者多个字段,FieldType是字段的数据类型,可以是基本类型(如int32、string、bool等)或其他定义的Message类型。fieldName是字段的名称,可以根据需求自定义。fieldNumber是字段的唯一标识号,用于在消息的二进制编码中标识字段。
364 0
|
3月前
|
Go
Go - 如何编写 ProtoBuf 插件 (一) ?
Go - 如何编写 ProtoBuf 插件 (一) ?
39 2
|
3月前
|
Go
Go - 如何编写 ProtoBuf 插件 (三) ?
Go - 如何编写 ProtoBuf 插件 (三) ?
23 1
|
3月前
|
Go
Go - 如何编写 ProtoBuf 插件(二)?
Go - 如何编写 ProtoBuf 插件(二)?
74 0
|
6月前
|
Java 编译器 Go
Protobuf3语法笔记
Protobuf3语法笔记
92 0
|
6月前
|
存储 Java Go
|
C++ 容器
使用protobuf的简单流程记录、编译protobuf时遇到的坑 以及 链接protobuf的坑
使用protobuf的简单流程记录、编译protobuf时遇到的坑 以及 链接protobuf的坑
310 0
|
编译器 Go
Golang泛型语法
在定义函数(结构等)时候,可能会有多种类型传入。只有在真正使用才知道是什么类型,此时就可以用一个更加宽泛的类型(必须存在一定约束,只能在那些类型的范围内使用)暂时占位。这个类型就叫泛型
818 0
|
XML 数据格式 C++
protobuf C++ 使用示例
1、在.proto文件中定义消息格式 2、使用protobuf编译器 3、使用c++ api来读写消息   0、为何使用protobuf?   1、原始内存数据结构,可以以二进制方式sent/saved.这种方式需要相同的内存布局和字节序。
8359 0