protocolbuffers/protobuf

GitHub Trending (daily) 工具

摘要

Protocol Buffers 是 Google 推出的语言无关、平台无关的数据交换格式。本 README 提供了协议编译器和运行时的安装说明与使用指南。

Protocol Buffers - Google 的数据交换格式
查看原文
查看缓存全文

缓存时间: 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
Javajava
Pythonpython
Objective-Cobjectivec
C#csharp
Rubyruby
Goprotocolbuffers/protobuf-go (https://github.com/protocolbuffers/protobuf-go)
PHPphp
Dartdart-lang/protobuf (https://github.com/dart-lang/protobuf)
JavaScriptprotocolbuffers/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 已支持 LSP。不客气

Hacker News Top

Buf 宣布推出首个功能齐全、生产级的 Protobuf LSP 服务器,提供现代 IDE 支持,例如跳转到定义和代码补全,由 Buf CLI 驱动。

使用Go开发移动应用

Hacker News Top

一位开发者分享了使用Go Mobile为Flutter应用构建后端的经验,详细介绍了通过protobuf和平台通道进行通信的方式。

Gobee:用Go编写eBPF程序,通过clang转译

Lobsters Hottest

Gobee是一个将Go的子集转译为BPF C的工具,允许开发者用Go而非C编写eBPF程序。它为用户空间生成类型化的Go绑定,并利用clang的后端进行编译。