vlambda博客
学习文章列表

面试官:ProtoBuf依赖GRPC么?(2021版原理及入门详解)

前言

上一篇文章我们讲了谷歌设计了一套协议,名叫 GRPC 。

中间非常关键的就是,他开发了一个编译工具名叫 Protobuf。

我们只需要按照 Protobuf 的语法设计我们的入参和出参剩下的就交给谷歌的库就好了。

这一篇文章我们一起来安装并使用 Protobuf 来设计一套接口。

安装

https://github.com/protocolbuffers/protobuf

我们直接去他的 Release 页面下载可执行文件到我们本地就好了,链接如下:

https://github.com/protocolbuffers/protobuf/releases/latest

选择对应的版本下载就好了

面试官:ProtoBuf依赖GRPC么?(2021版原理及入门详解)

解压后的文件列表:

面试官:ProtoBuf依赖GRPC么?(2021版原理及入门详解)

下载后放哪里呢?

我是 Mac 电脑,我直接把 protoc 这个可执行二进制文件放到了 Go 的 bin 目录下。

面试官:ProtoBuf依赖GRPC么?(2021版原理及入门详解)

因为这个目录我在安装 Go 的时候把他添加到了系统变量里面了,所以这个目录下面的都可以直接在命令行使用。

当然你也可以放其他地方,但你就需要去把这个二进制所在的目录,添加到环境变量了。

你如果是 Windows 也是一样的思路,由于目前为止我还没在 Windows 上开发过 Go。

所以怎么添加环境变量大家可以自行百度下,如果实在不知道怎么配置,可以下方留言。

之后你就可以在命令行里面输入:

protoc --version

如果你是 Mac 并且系统比较新,可能会出现这个文件损坏的情况。

此时你不必惊慌,去你的【系统偏好设置】里面的【安全性与隐私】的【通用】里面设置一下就好了。

如果出现这个提示:

面试官:ProtoBuf依赖GRPC么?(2021版原理及入门详解)


你可以直接点【打开】就好了,随即你就可以看到版本号:

libprotoc 3.17.3

这样就说明你安装好了。

继续安装

刚才安装的只是一个通用编译器,他只能编译 C++、PHP等文件。

如果要编译出 Go 的文件,还需要一个插件。

这个插件安装非常简单,直接在已经安装好 Go 的环境下执行:

go get github.com/golang/protobuf/protoc-gen-go

执行完毕后,你的 GOPATH 目录下会多一个 protoc-gen-go 文件:

面试官:ProtoBuf依赖GRPC么?(2021版原理及入门详解)

这个文件,会在我们需要把中间文件编译成 Go 的文件时候,自动调用,帮我们生成相关的 GRPC 依赖文件这些。

编写第一份中间文件

https://developers.google.com/protocol-buffers/docs/gotutorial

这里我们先无脑操作一遍,熟悉下流程。

这里我新建一个工程名为 k_grpc ,请不要纠结这个名字。

1、初始化 GoMod

在工程下面执行命令:

$ go mod init k_grpc
go: creating new go.mod: module k_grpc

2、新建 model 文件

在工程 /protos 目录下面新建一个文件名字为 models.proto 的文件,文件内容如下:

syntax="proto3";
option go_package = "k_grpc/pbFiles";

message Student{
int32 id=1; //学生ID
string name=2; //名字
int32 age=3; //年龄
}

message GetStudentRequest {
int32 s_id =1; //传入的学生ID
}
message GetStudentResponse {
Student result=1; //返回学生信息
}

简单解释下相应的意思:

  • syntax 表示版本号

  • option go_package 表示生成的文件包路径

  • message 可以理解是 Go 里面的定义结构体

到目前为止,你大致知道这么多就可以了,更深入的,后面会慢慢展开讲解。

3、编译文件

执行编译命令:

protoc --proto_path=protos --go_out=./../ models.proto

解释下相应参数的意思:

  • --proto_path 表示你存放 proto 文件的目录

  • models.proto 你要编译的文件

编译完毕后你就会看到你的工程下面会自动创建一个 pbFiles 目录,同时下面会有个 models.pb.go 文件,如下图所示:


但是你会发现这个文件里面的一些三方库爆红了。

那是因为我们还没在工程里面导入谷歌的支持库,导入命令如下:

$ go get google.golang.org/protobuf
go get: added google.golang.org/protobuf v1.27.1

导入之后整个工程就正常了,不爆红了。

到这里我们如何使用 Protobuf 定义接口就结束了。

这些文件生成后,如何使用,如果端对端互相调,请期待下一篇文章。

如果觉得有用,欢迎点赞、在看、关注、转发、收藏、一键五连召唤神龙