前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试官:ProtoBuf依赖GRPC么?(2021版原理及入门详解)

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

作者头像
小锟哥哥
发布2022-05-10 08:21:11
6610
发布2022-05-10 08:21:11
举报
文章被收录于专栏:GoLang全栈

前言

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

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

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

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

安装

这是他的官方 github 地址:

https://github.com/protocolbuffers/protobuf

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

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

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

解压后的文件列表:

下载后放哪里呢?

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

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

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

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

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

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

代码语言:javascript
复制
protoc --version

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

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

如果出现这个提示:

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

代码语言:javascript
复制
libprotoc 3.17.3

这样就说明你安装好了。

继续安装

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

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

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

代码语言:javascript
复制
go get github.com/golang/protobuf/protoc-gen-go

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

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

编写第一份中间文件

对于 ProtoBuf 文件的规范官方有有个文档,地址如下:

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

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

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

1、初始化 GoMod

在工程下面执行命令:

代码语言:javascript
复制
$ go mod init k_grpc
go: creating new go.mod: module k_grpc

2、新建 model 文件

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

代码语言:javascript
复制
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、编译文件

执行编译命令:

代码语言:javascript
复制
protoc --proto_path=protos --go_out=./../ models.proto

解释下相应参数的意思:

  • --proto_path 表示你存放 proto 文件的目录
  • --go_out go文件生成的地址
  • models.proto 你要编译的文件

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

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

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

代码语言:javascript
复制
$ go get google.golang.org/protobuf
go get: added google.golang.org/protobuf v1.27.1

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GoLang全栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 安装
    • 下载后放哪里呢?
      • 继续安装
      • 编写第一份中间文件
        • 1、初始化 GoMod
          • 2、新建 model 文件
            • 3、编译文件
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档