protocolbuffers/protobuf
摘要
Protocol Buffers 是 Google 推出的语言无关、平台无关的数据交换格式。本 README 提供了协议编译器和运行时的安装说明与使用指南。
查看缓存全文
缓存时间: 2026/08/21 21:55
protocolbuffers/protobuf 来源:https://github.com/protocolbuffers/protobuf
Protocol Buffers - Google的数据交换格式
OpenSSF 评分卡 (https://securityscorecards.dev/viewer/?uri=github.com/protocolbuffers/protobuf) 版权所有 2008 Google LLC
概述
Protocol Buffers(简称 protobuf)是 Google 推出的一种语言中立、平台中立、可扩展的结构化数据序列化机制。您可以在 protobuf 文档 (https://protobuf.dev) 中了解更多相关信息。
本 README 文件包含 protobuf 的安装说明。要安装 protobuf,您需要安装协议编译器(用于编译 .proto 文件)以及为所选编程语言安装的 protobuf 运行时。
使用 Protobuf 源代码
大多数用户会发现使用官方支持的发布版本 (https://github.com/protocolbuffers/protobuf/releases) 是最简单的途径。如果您选择从主分支的最新修订版进行开发,您的构建可能会偶尔因源代码不兼容的更改和测试不足(因此可能存在问题)的行为而中断。
如果您使用的是 C++,或者因为其他原因需要将 protobuf 从源代码构建到您的项目中,您应该锁定到一个发布分支上的特定发布提交。这是因为即使是发布分支,在两个发布提交之间也可能存在一些不稳定性。
Bazel 与 Bzlmod
从 Bazel 8+ 开始,Protobuf 支持 Bzlmod (https://bazel.build/external/module)。用户应在他们的 MODULE.bazel 文件中按如下方式指定对 protobuf 的依赖:
bazel_dep(name = "protobuf", version = )
用户可以选择性地覆盖仓库名称,例如为了与 WORKSPACE 兼容:
bazel_dep(name = "protobuf", version = , repo_name = "com_google_protobuf")
Bazel 与 WORKSPACE
用户也可以将以下内容添加到其传统的 WORKSPACE (https://bazel.build/external/overview#workspace-system) 文件中。请注意,随着 30.x 版本的发布,需要更多的 load 语句来正确设置 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()
Protobuf 编译器安装
Protobuf 编译器是用 C++ 编写的。如果您使用的是 C++,请按照 C++ 安装说明 安装 protoc 及其 C++ 运行时。
对于非 C++ 用户,安装协议编译器的最简单方法是从我们的 GitHub 发布页面 (https://github.com/protocolbuffers/protobuf/releases) 下载预构建的二进制文件。在每个发布版本的下载部分,您可以在 zip 包中找到预构建的二进制文件:protoc-$VERSION-$PLATFORM.zip。它包含 protoc 二进制文件以及一组随 protobuf 一起分发的标准 .proto 文件。
如果您在发布页面找不到想要的旧版本,请查看 Maven 仓库 (https://repo1.maven.org/maven2/com/google/protobuf/protoc/)。
这些预构建的二进制文件仅提供已发布的版本。如果您想使用 GitHub 主分支 HEAD 版本,或者需要修改 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 (https://github.com/protocolbuffers/protobuf-go) |
| PHP | php |
| Dart | dart-lang/protobuf (https://github.com/dart-lang/protobuf) |
| JavaScript | protocolbuffers/protobuf-javascript (https://github.com/protocolbuffers/protobuf-javascript) |
快速入门
学习如何使用 protobuf 的最佳方式是按照我们的开发者指南 (https://protobuf.dev/getting-started) 中的教程进行操作。如果您想通过代码示例学习,请查看 examples 目录中的示例。
文档
完整的文档可在 Protocol Buffers 文档站点 (https://protobuf.dev) 上获取。
支持政策
阅读我们的版本支持政策 (https://protobuf.dev/version-support/),以了解各语言库的支持时间范围。
开发者社区
要获取有关 Protocol Buffers 即将发生的变化的通知,并与 protobuf 开发者及用户建立联系,请加入 Google Group (https://groups.google.com/g/protobuf)。
相似文章
Protobuf-py:专为Python打造的Protocol Buffers库,毫不妥协
Buf 宣布推出 protobuf-py,一个从头编写的全新 Python Protocol Buffers 库,通过了完整的兼容性测试套件,生成可读的类型化 Python 代码,并提供可选的 Rust 加速以提高性能。
Protobuf 已支持 LSP。不客气
Buf 宣布推出首个功能齐全、生产级的 Protobuf LSP 服务器,提供现代 IDE 支持,例如跳转到定义和代码补全,由 Buf CLI 驱动。
@freeCodeCamp:现代分布式系统需要服务之间快速、可靠的通信方式。在这本手册中,@devseyi 解释了如…
一本全面的手册,讲解 RPC、Protocol Buffers 和 gRPC,用于构建现代分布式系统,并包含使用 Dart 和 Flutter 的动手实践。
使用Go开发移动应用
一位开发者分享了使用Go Mobile为Flutter应用构建后端的经验,详细介绍了通过protobuf和平台通道进行通信的方式。
Gobee:用Go编写eBPF程序,通过clang转译
Gobee是一个将Go的子集转译为BPF C的工具,允许开发者用Go而非C编写eBPF程序。它为用户空间生成类型化的Go绑定,并利用clang的后端进行编译。