宁睿 发表于 2025-1-22 01:24:06

搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具

参考文章:


[*]安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客
一、简朴介绍

本文开发环境,均为 windows 环境,mac 环境其实也类似 ~
   ① 编译proto文件,相干插件 简朴介绍:


[*]protoc 是编译器,用于将.proto文件编译成代码;
[*]protoc-gen-go 是一个插件,用于生成Go语言的数据结构代码;
[*]protoc-gen-go-grpc 是另一个插件,用于生成Go语言的gRPC服务代码。这三个工具共同支持在Go语言环境中利用protobuf和gRPC。
命令示例:protoc --go_out=. --go-grpc_out=. *.proto
在编译.proto文件时,go_out和go-grpc_out这两个参数分别会调用以下文件:

[*]go_out:这个参数会调用protoc-gen-go插件。protoc-gen-go插件的重要作用是将.proto文件转换为Go语言的代码。生成的文件通常包括消息(message)和枚举(enum)类型的界说,以及序列化和反序列化的方法。
[*]go-grpc_out:这个参数会调用protoc-gen-go-grpc插件。protoc-gen-go-grpc插件的重要作用是将.proto文件中的gRPC服务界说转换为Go语言的代码。生成的文件通常包括gRPC服务接口和客户端存根(client
stub)的界说。 这两个插件通常一起利用,以便在编译.proto文件时生成完备的Go代码,包括消息类型和gRPC服务接口。

② go get 和 go install 命令的利用场景:


[*]当你需要获取一个包的源代码并可能需要对其进行修改时,利用 go get。
[*]当你需要编译并安装一个包,以便利用它的可实行文件或库文件时,利用 go install。
环境:


[*]go版本:go1.19(留意:go版本过低,可能导致 go install 安装会报错,下面有介绍)
https://i-blog.csdnimg.cn/direct/1ed82127e02b483495853b375a7e3e9d.png
二、安装

建议:虽然有三种方法(github直接下载二进制,利用 go install 安装,手动 git clone 代码并安装),但不同插件安装方法略有不同。
protoc 和 protoc-gen-go 等二进制插件可以通过github来直接下载,而 protoc-gen-go-grpc 则需要通过 go install 安装。
方法一:github直接下载,各插件对应的二进制安装包

参考:安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客
步骤:github下载对应插件的压缩包,再解压,放在 $GOPATH/bin 目录下即可(需提前配好Go相干环境变量)
   protoc 安装:
https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.4(如下图示例:可按需选择对应版本)
https://i-blog.csdnimg.cn/direct/d0fa041bd80b4f31ad8ef47cdd212c03.png
解压后,可得到对应系统的可实行文件,如:protoc.exe,将其放在$GOPATH/bin 目录下即可。
检查是否安装乐成:protoc --version
protoc-gen-go 安装:
https://github.com/protocolbuffers/protobuf-go/tags
https://i-blog.csdnimg.cn/direct/18eb9cb39fdd4acf96b14c45e69eba47.png
解压后,可得到对应系统的可实行文件,如:protoc-gen-go.exe,将其放在$GOPATH/bin 目录下即可。
检查是否安装乐成:protoc-gen-go --version
protoc-gen-go-grpc 安装:
比力特殊,无法直接通过github下载二进制,建议利用 go install 命令安装,也就是方法二:
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0
终极可得:protoc-gen-go-grpc.exe,将其放在$GOPATH/bin 目录下即可。
检查是否安装乐成:protoc-gen-go-grpc --version
方法二:利用Go模块管理工具 (一步到位,但有些依赖可能无法顺遂下载,思量设置GOPROXY)

参考:安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客

[*] 安装 protoc
根据本身电脑系统,设置对应的GOOS

windows

go env -w GOOS=windows(设置完之后,记得还原)
linux

go env -w GOOS=linux(设置完之后,记得还原)
二进制 下载链接(可能无法通过go install 安装,直接去github下载二进制即可):

https://github.com/protocolbuffers/protobuf/tags
检查是否安装乐成

protoc --version
[*] 安装 protoc-gen-go
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.31.0
检查是否安装乐成

protoc-gen-go --version
如果下载失败,可以思量开启代理

go env -w GOPROXY=https://goproxy.cn,direct
   如果 go install 报错如下图,可能是由于你的 go 版本过低导致,可以思量升级 go 版本,比如升级到 go1.19。


[*]报错:package google.golang.org/protobuf/cmd/protoc-gen-go@v1.31.0: can only use
path@version syntax with ‘go get’
https://i-blog.csdnimg.cn/direct/71df9d45742942abbc562dcfefe6607c.png
[*]解决:升级 go 版本:https://golang.google.cn/dl/
https://i-blog.csdnimg.cn/direct/4f743de7112d4a489b54cea1a790e466.png

[*] 安装 protoc-gen-go-grpc
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0
// 检查是否安装乐成
protoc-gen-go-grpc --version
全部插件安装完后,效果如下:
https://i-blog.csdnimg.cn/direct/6d0d502d899c451da797311c2cc16943.png
方法三:手动编译源代码(不推荐,较麻烦,需额外下载源码 编译&安装)

参考:windows安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客
步骤:

[*]下载项目源码:git clone xxx ...
[*]进入项目并安装:实行 go install .,编译&安装包,生成可实行二进制文件
三、编译 .proto 文件

proto安装好后,实验编译你界说好的 .proto 文件,命令如下:
protoc --go_out=. --go-grpc_out=. *.proto


[*]--go_out=. 其中的. 是说你要编译的 .proto 文件目录为当前目录,按需修改
[*]--go-grpc_out=.,其中的. 是说你生成 .pb.go 文件的目录,按需修改
[*]*.proto,其中的 * 是说编译当前目录下的全部 .proto 文件,也可以单独指定为 xxx.proto 文件
四、错误问题&解决

protoc命令实行过程中,可能会遇到如下错误:
   PS D:WorkCodeGosrc estproto> protoc --go_out=.
–go-grpc_out=plugins=grpc:. xxx.proto protoc-gen-go: unable to determine Go import path for “xxx.proto”
Please specify either:
a “go_package” option in the .proto source file, or
a “M” argument on the command line.
https://i-blog.csdnimg.cn/direct/5a4cedfc25f241578613770814e2e43c.png
解决方法:
参考:protoc-gen-go: unable to determine Go import path for “*.proto“问题解决-CSDN博客

[*] 在你的 .proto 文件中,添加如下代码option go_package = "./";,具体path可能不同,如图所示:https://i-blog.csdnimg.cn/direct/6a729eb612f14218a2cac14f6a107447.jpeg
// helloworld.proto
syntax = “proto3”;
package helloworld;
option go_package = “./”;
// 界说请求消息
message HelloRequest {
string name = 1;
}
// 界说相应消息
message HelloReply {
string message = 1;
}
// 界说服务
service Greeter {
// 界说SayHello方法
rpc SayHello (HelloRequest) returns (HelloReply);
}
终极效果:
https://i-blog.csdnimg.cn/direct/65f09bd8f56a480ab06c9c3839e00526.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具