Protocol Buffers

protocolbuffers/protobuf 访问 GitHub ↗
🔤 C++ ★ 71769 ⑂ 0 daily #15 (+4) 抓取 2026-08-22

一句话简介

Google 开发的高效结构化数据序列化框架,支持跨语言数据交换,体积小、速度快,是 RPC 和数据存储的事实标准。

标签

  • 序列化
  • 数据交换
  • 跨语言
  • RPC
  • C++

适用应用场景

  • 微服务间高效数据传输
  • 配置文件与数据存储
  • 跨平台网络通信协议定义
  • gRPC 接口定义语言底层支撑

README 中文摘要

Protocol Buffers 简介

Protocol Buffers(protobuf)是 Google 推出的语言中立、平台中立、可扩展的结构化数据序列化机制。完整文档可在官方站点查阅。

安装组成

安装 protobuf 需要两部分:

  • protoc 编译器:用于将 .proto 文件编译为目标语言代码。
  • protobuf 运行时库:对应所选编程语言的运行时支持。

源码使用建议

大多数用户应从官方发布版本获取预构建产物。如果从主分支 HEAD 拉取构建,可能遇到源码不兼容变更或未经充分测试的不稳定行为。若使用 C++ 或需要在项目中本地构建 protobuf,应固定到发布分支上的某个发布提交,因为发布分支在两次发布之间也可能存在不稳定因素。

Bazel 集成

Bzlmod 方式(Bazel 8 及以上)

MODULE.bazel 中声明依赖:

bazel_dep(name = "protobuf", version = <VERSION>)

如需自定义仓库名以兼容 WORKSPACE,可指定 repo_name

bazel_dep(name = "protobuf", version = <VERSION>, repo_name = "com_google_protobuf")

WORKSPACE 方式

WORKSPACE 文件中添加 http_archive 拉取源码,并依次加载相关依赖:

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()

注:自 30.x 版本起,需额外加载 rules_javarules_python 相关规则。

编译器安装

protoc 编译器本身由 C++ 编写。使用 C++ 的用户应参考 src/README.md 一并安装编译器与 C++ 运行时。

非 C++ 用户最简便的方式是从 GitHub Releases 页面下载预构建二进制包 protoc-$VERSION-$PLATFORM.zip,其中包含 protoc 可执行文件以及随 protobuf 分发的标准 .proto 文件。

若发布页面未提供所需旧版本,可前往 Maven 仓库查找。这些预构建二进制仅针对发布版本提供;若需使用 HEAD 版本、修改 protobuf 代码,或使用 C++,建议从源码自行构建。

运行时安装

protobuf 支持多种编程语言,各语言的运行时安装说明位于对应源码目录:

语言 位置
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 的变更动态并与开发者及用户交流,可加入 Google Group 邮件列表。

摘要更新于 2026-08-22 00:32:09 · 原文 6164 字符 · md5 e95e2167ba85…