Protocol Buffers — Google 的数据交换格式
版权所有 2008 Google LLC
概述
Protocol Buffers(亦称 protobuf)是 Google 开发的一种与语言无关、与平台无关且具有可扩展性的结构化数据序列化机制。您可以在 protobuf 的文档中了解更多相关信息。
本 README 文件包含 protobuf 的安装说明。要安装 protobuf,您需要为所选的编程语言安装协议编译器(用于编译 .proto 文件)以及 protobuf 运行时环境。
使用 Protobuf 源代码
大多数用户会发现,从supported releases开始使用是最佳途径。
如果您选择直接使用主分支的最新版本,由于源代码中的不兼容变更以及经过充分测试的代码缺失(从而导致问题),您的构建过程偶尔会出现故障。
如果您使用 C++,或因项目需求需要从源代码构建 protobuf,建议锁定到某个发布分支上的特定版本提交。
这是因为即便在发布分支上,不同的版本提交之间也可能存在一定的不稳定性。
使用 Bzlmod 的 Bazel
Protocol Buffers 支持在 Bazel 8+ 版本中结合使用Bzlmod。用户应在各自的 MODULE.bazel 文件中按如下方式指定 protobuf 作为依赖项。
bazel_dep(name = "protobuf", version = <VERSION>)
用户可根据需要自行指定仓库名称,以便与 WORKSPACE 文件保持兼容。
bazel_dep(name = "protobuf", version = <VERSION>, repo_name = "com_google_protobuf")
使用 WORKSPACE 的 Bazel
用户也可以在传统的WORKSPACE文件中添加以下内容。
需要注意的是,从 30.x 版本开始,为了正确配置 rules_java 和 rules_python,需要添加更多的加载语句。
http_archive(
name = "com_google_protobuf",
strip_prefix = "protobuf-VERSION",
sha256 = ...,
url = ...,
)
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
protobuf_deps()
load("@rules_java//java:rules_java_deps.bzl", "rules_java_dependencies")
rules_java_dependencies()
load("@rules_java//java:repositories.bzl", "rules_java_toolchains")
rules_java_toolchains()
load("@rules_python//python:repositories.bzl", "py_repositories")
py_repositories()
Protocol Buffers 编译器安装
protobuf 编译器是用 C++ 编写的。如果您使用 C++,请按照C++ 安装说明来安装 protoc 以及相应的 C++ 运行时环境。
对于非 C++ 用户而言,最简单的安装协议编译器的方法是从我们的GitHub 发布页面下载预编译的二进制文件。
在每个版本的下载区域,您都可以找到以 zip 包形式提供的预编译二进制文件:protoc-$VERSION-$PLATFORM.zip。这些包中不仅包含 protoc 二进制文件,还有一组与 protobuf 一同分发的标准.proto文件。
如果您需要版本页面上未提供的旧版本,可以前往Maven 仓库查看。
这些预编译的二进制文件仅提供给已发布的版本。如果您想使用 HEAD 下的 github 主版本,或者需要修改 protobuf 代码,又或者正在使用 C++,建议从源代码自行编译 protoc 二进制文件。
如果您希望从源代码编译 protoc 二进制文件,请参阅 C++ 安装说明。
Protobuf 运行时安装
Protobuf 支持多种不同的编程语言。对于每种编程语言,您都可以在对应的源代码目录中找到相关说明,了解如何为该语言安装 protobuf 运行时:
| 编程语言 | 源代码目录 |
|---|---|
| C++(包含 C++ 运行时及 protoc) | src |
| Java | java |
| Python | python |
| Objective-C | objectivec |
| C# | csharp |
| Ruby | ruby |
| Go | protocolbuffers/protobuf-go |
| PHP | php |
| Dart | dart-lang/protobuf |
| JavaScript | protocolbuffers/protobuf-javascript |
快速入门
学习如何使用 protobuf 的最佳方式是阅读 我们的开发者指南中的教程。
如果您想通过代码示例学习,可以查看 examples 目录中的示例。
文档
完整的文档可在 Protocol Buffers 文档网站 上找到。
支持政策
请阅读我们的 版本支持政策,以了解各语言库的支持时间范围。
开发者社区
如需及时了解 Protocol Buffers 的即将进行的变更,并与 protobuf 的开发者和用户建立联系,请 加入 Google 群组。