搭建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);

    }

最终效果:

相关推荐
llz_11242 分钟前
web-第二次课后作业
前端·后端·web
红尘散仙7 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记8 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
isyangli_blog8 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008118 小时前
FastAPI APIRouter
开发语言·python
Benszen8 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆8 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木8 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
喵个咪9 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
杨充9 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法