搭建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_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
  1. 安装 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’
    在这里插入图片描述
  • 解决:升级 go 版本:https://golang.google.cn/dl/
    在这里插入图片描述
  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:\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.protosyntax = "proto3";package helloworld;
option go_package = "./";// 定义请求消息
message HelloRequest {string name = 1;
}// 定义响应消息
message HelloReply {string message = 1;
}// 定义服务
service Greeter {// 定义SayHello方法rpc SayHello (HelloRequest) returns (HelloReply);
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/55907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel 表格中url转图片

待处理的单元格通过如下公式获取目标格式&#xff1a; "<table><img src"&A4&" height20></table>" 然后下拉后获取多列的单元格转换结果&#xff0c; 然后将这些转换后的结果拷贝到纯文本文档中&#xff0c; 然后再将纯文本…

音乐播放器-0.专栏介绍​

1.简介 本专栏使用Qt QWidget作为显示界面&#xff0c;你将会学习到以下内容&#xff1a; 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放&#xff0c;音乐歌词文件加载&#xff0c;展示。 6.播放器界面换肤。 相信学习了本专栏…

【Qt】Qt的介绍——Qt的概念、使用Qt Creator新建项目、运行Qt项目、纯代码方式、可视化操作、认识对象模型(对象树)

文章目录 Qt1. Qt的概念2. 使用Qt Creator新建项目3. 运行Qt项目3.1 纯代码方式实现3.2 可视化操作实现 4. 认识对象模型&#xff08;对象树&#xff09; Qt 1. Qt的概念 Qt 是一个跨平台的 C 图形用户界面应用程序开发框架。它是软件开发者提供的用于界面开发的程序框架&#…

Mysql(5)—函数

一、关于函数 1.1 简介 MySQL提供了许多内置的函数以帮助用户进行数据操作和分析。这些函数可以分为几类&#xff0c;包括聚合函数、字符串函数、数值函数、日期和时间函数、控制流函数等。 ​ ‍ 1.2 发展 早期版本&#xff08;MySQL 3.x 和 4.x&#xff09; : MySQL 最初…

无人机之三维航迹规划篇

一、基本原理 飞行环境建模&#xff1a;在三维航迹规划中&#xff0c;首先需要对飞行环境进行建模。这包括对地形、障碍物、气象等因素进行准确的测量和分析&#xff0c;以获得可行的飞行路径。 飞行任务需求分析&#xff1a;根据无人机的任务需求&#xff0c;确定航迹规划的…

Java最全面试题->计算机基础面试题->计算机网络面试题

计算机网络 下边是我自己整理的面试题&#xff0c;基本已经很全面了&#xff0c;想要的可以私信我&#xff0c;我会不定期去更新思维导图 哪里不会点哪里 1.说一下TCP/IP四层模型 TCP/IP协议是美国国防部高级计划研究局为实现ARPANET互联网而开发的。 网络接口层&#xff…

现代物流管理:SpringBoot技术突破

3系统分析 3.1可行性分析 通过对本智能物流管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本智能物流管理系统采用SSM框架&#xff0c;JAVA作为开发语…

【云从】九、CDN加速

文章目录 1、CDN基本概念2、CDN加速3、云CDN 1、CDN基本概念 源站&#xff1a;用户稳定运行的业务应用服务器 静态内容&#xff1a;用户多次访问某一资源&#xff0c;响应返回的数据都是相同的内容 例如:图片、视频、软件安装包、安卓 apk 安装包、压缩包文件等动态内容&…

【数据结构】栈和队列经典题目

目录 1.有效的括号【链接】 代码实现 2.用队列实现栈【链接】 代码实现 3.用栈实现队列 ​编辑 代码实现 4.循环队列&#xff08;数组实现&#xff09;【链接】 代码实现 1.有效的括号【链接】 题目描述&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&…

Mycat 详细介绍及入门实战,解决数据库性能问题

一、基本原理 1、数据分片 &#xff08;1&#xff09;、水平分片 Mycat 将一个大表的数据按照一定的规则拆分成多个小表&#xff0c;分布在不同的数据库节点上。例如&#xff0c;可以根据某个字段的值进行哈希取模&#xff0c;将数据均匀的分布到不同的节点上。 这样做的好处…

数据结构7——二叉树的顺序结构以及堆的实现

在上篇文章数据结构6——树与二叉树中&#xff0c;我们了解了树和二叉树的概念&#xff0c;接着上篇文章&#xff0c;在本篇文章中我们学习二叉树顺序结构的实现。 目录 1. 二叉树的顺序存储结构 2. 堆的概念及结构 1. 堆的概念 2. 堆的结构 3. 堆的实现 1. 堆节点 2. 交…

R语言实现logistic回归曲线绘制

方式一&#xff1a;编制函数 x<-rnorm(10000)#设置随机种子 #编写绘图函数代码快 f <- function(x){y 1/(1 exp(-x))plot(x,y)}#sigmoid函数 f(x)​ 方式二&#xff1a;Sigmoid函数代码 x<-rnorm(10000)#设置随机种子 #编写绘图函数代码块 #y<-1/(1exp(-x)) y&…

数据结构-复杂度

复杂度 1.数据结构1.1算法 2.算法效率2.1复杂度的概念 3.时间复杂度3.1大O渐进表示法3.2时间复杂度计算示例3.2.1 示例13.2.2 示例23.2.3 示例33.2.4 示例43.2.5 示例5&#xff1a;3.2.6 示例63.2.7 示例7 4.空间复杂度4.1.1 示例14.1.2 示例2 5.常见复杂度对比6.复杂度算法题6…

【重学 MySQL】六十七、解锁检查约束,守护数据完整性

【重学 MySQL】六十七、解锁检查约束&#xff0c;守护数据完整性 检查约束的基本概念检查约束的语法检查约束的使用场景注意事项示例 在MySQL中&#xff0c;检查约束&#xff08;CHECK&#xff09;是一种用于确保表中数据满足特定条件的约束。 检查约束的基本概念 检查约束用…

考研前所学c语言02(2024/10/16)

1.一个十进制的数转化为二进制的就是不断除二取余&#xff0c;得到的余数从下到上取 比如123&#xff1a; 结果为&#xff1a; 同理其他的十进制转八进制&#xff0c;十六进制就除八&#xff0c;除十六即可 再比如123转十六进制&#xff1a; 因为余数是11&#xff0c;十六进…

【JavaEE初阶】深入理解网络编程—使用UDP协议API实现回显服务器

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP/UDP协议的原理理解~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…

从0开始深度学习(12)——多层感知机的逐步实现

依然以Fashion-MNIST图像分类数据集为例&#xff0c;手动实现多层感知机和激活函数的编写&#xff0c;大部分代码均在从0开始深度学习&#xff08;9&#xff09;——softmax回归的逐步实现中实现过 1 读取数据 import torch from torchvision import transforms import torchv…

查找与排序-交换排序

交换排序是基于“比较”和“交换”两种操作来实现的排序方法 。 由于选择“比较”的基准元素不同&#xff0c;可将交换排序分为以下两种&#xff1a; 冒泡排序快速排序 一、冒泡排序 1.冒泡排序基本思想 因为其实现与气泡从水中往上冒的过程类似而得名。 每一趟的…

基于SpringBoot+Vue+uniapp微信小程序的垃圾分类系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

Redux (八) 路由React-router、嵌套路由、路由传参、路由懒加载

文章目录 一、React-Router的基本使用1. 安装及基本使用(路由映射配置)2. 路由跳转Link与NavLink3. Navigate导航4. 处理路径不存在的情况 二、嵌套路由三、手动跳转 (类似编程式路由导航)1. 函数式组件2. 类组件实现手动跳转 四、路由传参1. 路径设置占位符(params)2. search传…