ITADN
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Protocol Buffers — Google 的数据交换格式

OpenSSF Scorecard

版权所有 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
Javajava
Pythonpython
Objective-Cobjectivec
C#csharp
Rubyruby
Goprotocolbuffers/protobuf-go
PHPphp
Dartdart-lang/protobuf
JavaScriptprotocolbuffers/protobuf-javascript

快速入门

学习如何使用 protobuf 的最佳方式是阅读 我们的开发者指南中的教程

如果您想通过代码示例学习,可以查看 examples 目录中的示例。

文档

完整的文档可在 Protocol Buffers 文档网站 上找到。

支持政策

请阅读我们的 版本支持政策,以了解各语言库的支持时间范围。

开发者社区

如需及时了解 Protocol Buffers 的即将进行的变更,并与 protobuf 的开发者和用户建立联系,请 加入 Google 群组