在mac上安装Protocol Buffers和Go语言相关插件

基本概念:

Protocol Buffers(通常简称为 Protobuf)是一种由 Google 开发的用于序列化结构化数据的语言中立、平台中立、可扩展的机制。它类似于 XML 和 JSON,但更小、更快、更简单。以下是对 Protocol Buffers 的简单介绍

主要特点:

语言中立:Protocol Buffers 可以生成多种编程语言的代码(如 C++、Java、Python、Go、C# 等),使得不同语言编写的系统之间可以轻松地交换数据。

平台中立:它可以在不同的操作系统和硬件平台上使用,确保数据在不同环境中的兼容性。

高效的数据序列化:Protocol Buffers 生成的数据格式非常紧凑,比 XML 和 JSON 更小,传输和存储效率更高。序列化和反序列化速度快,适合高性能应用场景。

可扩展性:您可以随时添加新的字段到数据结构中,而不会破坏现有的代码和数据。旧版本的代码仍然可以读取新版本的数据,只要忽略新字段即可。

定义数据结构:使用 .proto 文件定义数据结构,描述数据的字段和类型。例如:

message Person {
  string name = 1;
  int32 id = 2;
  string email = 3;
}

如何在 mac 上进行安装protobuf 和相关 go 插件:

在 mac 上可以很方便的使用 homebrew 进行安装。不过需要注意的是,名称需要注意。

brew install protobuf

brew install protoc-gen-go

brew install protoc-gen-go-grpc

三个命令分别执行之后等待一段时间久可以下载完成。

验证安装结果:

protoc --version

protoc-gen-go --version

protoc-gen-go-grpc --version

执行上面的命令,能看到命令行,输出版本信息,说明已经安装完成,比如我安装的版本是 28.2。

libprotoc 28.2

protoc-gen-go v1.35.1

protoc-gen-go-grpc 1.5.1

几个关键的名词解释:

Protocol Buffers(Protobuf)、protoc-gen-goprotoc-gen-go-grpc 之间的关系可以概括为以下几点:

Protocol Buffers(Protobuf)

  • 定义:Protocol Buffers 是一种用于序列化结构化数据的语言中立、平台中立、可扩展的机制。
  • 作用:它允许开发者定义数据结构(使用 .proto 文件),并通过编译器生成不同编程语言的代码,以便在不同系统之间高效地交换数据。

protoc 编译器

  • 定义protoc 是 Protocol Buffers 的编译器,用于将 .proto 文件编译成目标编程语言的代码。
  • 作用protoc 读取 .proto 文件,并生成相应的代码文件,这些代码文件包含了数据结构的定义和序列化/反序列化的方法。

protoc-gen-go

  • 定义protoc-gen-go 是一个插件,用于 protoc 编译器,专门生成 Go 语言的代码。
  • 作用:当使用 protoc 编译 .proto 文件时,可以通过指定 --go_out 参数来调用 protoc-gen-go 插件,生成 Go 语言的代码。生成的代码包括数据结构的定义、序列化和反序列化的方法。

protoc-gen-go-grpc

  • 定义protoc-gen-go-grpc 是另一个插件,用于 protoc 编译器,专门生成 Go 语言的 gRPC 代码。
  • 作用:当使用 protoc 编译 .proto 文件时,可以通过指定 --go-grpc_out 参数来调用 protoc-gen-go-grpc 插件,生成 Go 语言的 gRPC 代码。生成的代码包括 gRPC 服务的接口定义、客户端和服务器端的代码。

关系总结

  • Protocol Buffers 是定义数据结构和序列化机制的基础。
  • protoc 编译器 是用于将 .proto 文件编译成不同编程语言代码的工具。
  • protoc-gen-goprotoc 的一个插件,专门用于生成 Go 语言的代码。
  • protoc-gen-go-grpcprotoc 的另一个插件,专门用于生成 Go 语言的 gRPC 代码。

使用示例

假设你有一个 .proto 文件 example.proto,你可以使用以下命令生成 Go 语言的代码:

protoc --go_out=. --go-grpc_out=. example.proto
  • --go_out=. 参数调用 protoc-gen-go 插件,生成 Go 语言的基本代码。
  • --go-grpc_out=. 参数调用 protoc-gen-go-grpc 插件,生成 Go 语言的 gRPC 代码。
全部评论(0)