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

参考文章:

一、简单介绍

本文开发环境,均为 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_outgo-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 安装会报错,下面有介绍)

二、安装

建议:虽然有三种方法(github直接下载二进制,使用 go install 安装,手动 git clone 代码并安装),但不同插件安装方法略有不同。

protocprotoc-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(如下图示例:可按需选择对应版本)

解压后,可得到对应系统的可执行文件,如:protoc.exe ,将其放在$GOPATH/bin 目录下即可。

检查是否安装成功:protoc --version


protoc-gen-go 安装:

https://github.com/protocolbuffers/protobuf-go/tags

解压后,可得到对应系统的可执行文件,如: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博客

  1. 安装 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

  2. 安装 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

  1. 安装 protoc-gen-go-grpc

    go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0

    // 检查是否安装成功

    protoc-gen-go-grpc --version

所有插件安装完后,效果如下:

方法三:手动编译源代码(不推荐,较麻烦,需额外下载源码 编译&安装)

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

步骤:

  1. 下载项目源码:git clone xxx ...
  2. 进入项目并安装:执行 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.

解决方法:

参考:protoc-gen-go: unable to determine Go import path for "*.proto"问题解决-CSDN博客

  1. 在你的 .proto 文件中,添加如下代码option go_package = "./";,具体path可能不同,如图所示:

    // 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);

    }

最终效果:

相关推荐
Oneslide11 小时前
UI设计-企业OA风格
前端
绝知此事11 小时前
ELK 从入门到精通:Spring Boot 实战三部曲(三)—— 高级应用与架构设计
spring boot·后端·elk
程序员海军11 小时前
我用了 8 个月 Codex CLI,总结出这套 AI 编程工作流
前端·后端·aigc
我是一颗柠檬11 小时前
【Redis】列表与集合Day4(2026年)
数据库·redis·后端·缓存
techdashen11 小时前
Rust 中的小字符串:smol_str 与 smartstring 的对决
开发语言·后端·rust
এ慕ོ冬℘゜11 小时前
手写一款高兼容、零BUG图片预览组件|前端
前端·bug
铁链鞭策大师11 小时前
javaEE之多线程(2)
java·前端·java-ee
KaMeidebaby11 小时前
卡梅德生物技术快报|生信实操:ChIP 染色质免疫共沉淀技术流程、短板与替代方案详解
前端·人工智能·物联网·百度·新浪微博
weixin1997010801611 小时前
[特殊字符] 【性能提升300%】仿1688首页的Webpack优化全记录(附构建分析Python脚本)
前端·python·webpack
海兰11 小时前
【文字三国志:第五篇】天命重构,游戏前端UI设计
前端·人工智能·游戏·语言模型