protocolbuffers/protobuf
GitHub: protocolbuffers/protobuf
Google 推出的语言中立、高效的结构化数据序列化框架,用于跨语言、跨平台的数据交换与通信协议定义。
Stars: 70789 | Forks: 16050
# Protocol Buffers - Google 的数据交换格式
[](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)是最简单的途径。
如果你选择使用主分支的 head 版本,你的构建偶尔会因源代码不兼容的更改和测试不足(因此损坏)的行为而中断。
如果你使用 C++,或者出于项目需要必须从源代码构建 protobuf,你应该固定到发布分支上的某个发布 commit。
这是因为即使是发布分支,在两次发布 commit 之间也可能会经历一些不稳定性。
### 使用 Bazel 和 Bzlmod
Protobuf 支持 Bazel 8 + 版本的 [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++ 安装说明](src/README.md)来安装 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/)。
这些预构建的二进制文件仅针对已发布的版本提供。如果你想使用 HEAD 处的 github 主版本,或者你需要修改 protobuf 代码,或者你使用的是 C++,建议从源代码构建你自己的 protoc 二进制文件。
如果你想从源代码构建 protoc 二进制文件,请参阅 [C++ 安装说明](src/README.md)。
## Protobuf 运行时安装
Protobuf 支持多种不同的编程语言。对于每种编程语言,你可以在相应的源目录中找到有关如何安装该特定语言的 protobuf 运行时的说明:
| 语言 | 源代码 |
|--------------------------------------|-------------------------------------------------------------|
| C++ (include C++ runtime and protoc) | [src](src) |
| Java | [java](java) |
| Python | [python](python) |
| Objective-C | [objectivec](objectivec) |
| C# | [csharp](csharp) |
| Ruby | [ruby](ruby) |
| Go | [protocolbuffers/protobuf-go](https://github.com/protocolbuffers/protobuf-go)|
| PHP | [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](examples) 目录中的示例。
## 文档
完整文档可在 [Protocol Buffers 文档站点](https://protobuf.dev)找到。
## 支持政策
阅读我们的[版本支持政策](https://protobuf.dev/version-support/),以了解语言库的支持时间框架。
## 开发者社区
若要接收 Protocol Buffers 即将发生变更的警报,并与 protobuf 开发者和用户建立联系,[请加入 Google Group](https://groups.google.com/g/protobuf)。
标签:Bazel, C++, CVE监控, DNS解析, Go, Google, IDL, JS文件枚举, Nuclei, Protobuf, Protocol Buffers, Python, RPC, Ruby工具, 中间件, 序列化, 开发库, 开源项目, 接口定义语言, 数据交换格式, 数据可视化, 数据序列化, 数据擦除, 数据结构, 无后门, 日志审计, 语言中立, 逆向工具, 通信协议