面试官:ProtoBuf依赖GRPC么?(2021版原理及入门详解)
前言
上一篇文章我们讲了谷歌设计了一套协议,名叫 GRPC 。
中间非常关键的就是,他开发了一个编译工具名叫 Protobuf。
我们只需要按照 Protobuf 的语法设计我们的入参和出参剩下的就交给谷歌的库就好了。
这一篇文章我们一起来安装并使用 Protobuf 来设计一套接口。
安装
https://github.com/protocolbuffers/protobuf
我们直接去他的 Release 页面下载可执行文件到我们本地就好了,链接如下:
https://github.com/protocolbuffers/protobuf/releases/latest
选择对应的版本下载就好了。
解压后的文件列表:
下载后放哪里呢?
我是 Mac 电脑,我直接把 protoc 这个可执行二进制文件放到了 Go 的 bin 目录下。
因为这个目录我在安装 Go 的时候把他添加到了系统变量里面了,所以这个目录下面的都可以直接在命令行使用。
当然你也可以放其他地方,但你就需要去把这个二进制所在的目录,添加到环境变量了。
你如果是 Windows 也是一样的思路,由于目前为止我还没在 Windows 上开发过 Go。
所以怎么添加环境变量大家可以自行百度下,如果实在不知道怎么配置,可以下方留言。
之后你就可以在命令行里面输入:
protoc --version
如果你是 Mac 并且系统比较新,可能会出现这个文件损坏的情况。
此时你不必惊慌,去你的【系统偏好设置】里面的【安全性与隐私】的【通用】里面设置一下就好了。
如果出现这个提示:
你可以直接点【打开】就好了,随即你就可以看到版本号:
libprotoc 3.17.3
这样就说明你安装好了。
继续安装
刚才安装的只是一个通用编译器,他只能编译 C++、PHP等文件。
如果要编译出 Go 的文件,还需要一个插件。
这个插件安装非常简单,直接在已经安装好 Go 的环境下执行:
go get github.com/golang/protobuf/protoc-gen-go
执行完毕后,你的 GOPATH 目录下会多一个 protoc-gen-go 文件:
这个文件,会在我们需要把中间文件编译成 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 定义接口就结束了。
这些文件生成后,如何使用,如果端对端互相调,请期待下一篇文章。
如果觉得有用,欢迎点赞、在看、关注、转发、收藏、一键五连召唤神龙