首页 > 其他分享 >搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程

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

时间:2024-10-20 17:45:51浏览次数:3  
标签:protoc proto grpc go 安装 gen

参考文章:

一、简单介绍

本文开发环境,均为 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/[email protected]

最终可得: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
  1. 安装 protoc-gen-go
go install google.golang.org/protobuf/cmd/[email protected]
# 检查是否安装成功
protoc-gen-go --version

# 如果下载失败,可以考虑开启代理
go env -w GOPROXY=https://goproxy.cn,direct

如果 go install 报错如下图,可能是因为你的 go 版本过低导致,可以考虑升级 go 版本,比如升级到 go1.19

  • 报错:package google.golang.org/protobuf/cmd/[email protected]: can only use
    path@version syntax with ‘go get’
    在这里插入图片描述
  • 解决:升级 go 版本:https://golang.google.cn/dl/
    在这里插入图片描述
  1. 安装 protoc-gen-go-grpc
go install google.golang.org/grpc/cmd/[email protected]
// 检查是否安装成功
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:\Work\Code\Go\src\test\proto> 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);
}

最终效果:
在这里插入图片描述

标签:protoc,proto,grpc,go,安装,gen
From: https://blog.csdn.net/qq_37102984/article/details/143026783

相关文章

  • 【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有
    【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉”零、报错在使用DiskGenius对磁盘分区进行调整时,DiskGenius检查出磁盘报错,报错信息:文件使用的簇被标记为空闲或与其它文件有交叉,本文介绍如何解决此错误。注意:在操作磁盘之前请把重要数......
  • [包教包会]C语言:详解分支语句(if , switch , goto)和循环语句(while , for , do while
    概览控制语句用于控制程序的执行流程,以实现程序的各种结构方式C语言支持三种结构:顺序结构、选择结构(分支)、循环结构:(其实显示中的事件也都是由这三者混合合成的)它们由特定的语句定义符组成,C语言有九种控制语句。可分成以下三类:1.条件判断语句也叫分支语句:if语句......
  • Nuxt.js 应用中的 app:templatesGenerated 事件钩子详解
    title:Nuxt.js应用中的app:templatesGenerated事件钩子详解date:2024/10/19updated:2024/10/19author:cmdragonexcerpt:app:templatesGenerated是Nuxt.js的一个生命周期钩子,在模板编译到虚拟文件系统(VirtualFileSystem,VFS)之后被调用。这个钩子允许开发......
  • DreamMesh4D: Video-to-4D Generation with Sparse-Controlled Gaussian-Mesh HybridR
    目录一、概述二、前置知识1、分数蒸馏采样 2、LBS 3、DQS4、EucDist和GeoDist算法三、相关工作1、三维生成2、4D表示3、4D生成四、DreamMesh4D1、静态阶段 2、动态阶段-可变形图建立 3、动态阶段--自适应可变蒙皮算法 一、概述    该论文提出了......
  • 【开题报告】基于django+vue基于微信小程序的车位共享系统的设计与实现_小程序(论文+
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景随着城市化进程的加快,汽车保有量不断攀升,停车难问题日益凸显。关于车位资源管理的研究,现有研究主要以传统停车场管理和大型商业停车场......
  • (开题报告)django+vue酒店管理系统论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于酒店管理系统的研究,现有研究主要以传统的开发技术为主,专门针对Django+Vue技术栈构建的酒店管理系统研究较少。在国内外,酒店管理......
  • 毕业设计:python股票推荐系统 数据分析可视化 协同过滤推荐算法 Django框架(源码+论文)✅
    python股票推荐系统数据分析可视化协同过滤推荐算法Django框架(源码)✅1、项目介绍技术栈:python、django框架、requests、BeautifulSoup、协同过滤算法、Echarts可视化、HTML登录注册界面:用户可以注册新账号并登录系统。个人信息修改:用户可以修改个人信息,如用户名、......
  • NBA球员分析与可视化和信息管理系统(Python+Django+lw+系统源码 +调试)
    摘 要近年来,科技飞速发展,在经济全球化的背景之下,大数据将进一步提高社会综合发展的效率和速度,大数据技术也会涉及到各个领域,而爬虫实现网站数据可视化在网站数据可视化背景下有着无法忽视的作用。管理信息系统的开发是一个不断优化的过程,随着网络大数据时代的到来,管理信息......
  • mongo基本命令(一)
    一前言环境:win10mongo6.0.1记录一些基本的mongo查询命令二查询命令1进入命令行进入mongo命令行,我这里是mongo是装在docker里面的需要先在docker里面启动mongo容器dockerexec-itxxxbash 进入mongo容器,xxx为mongo容器名mongosh 进入mongo命令行,我安装时没有设......
  • 【Google Cloud】Private Service Connect 功能解说
    本文介绍PrivateServiceConnect,这是一项通过专用网络访问Google云API的功能。概要什么是PrivateServiceConnect?PrivateServiceConnect是一种,允许没有外部IP(公共IP)的虚拟机和本地部署自有客户端通过专用网络访问GoogleCloudAPI和托管在GoogleCloud......