热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gomod写grpc服务

本文为gomod简单搭建grpc服务demo实践。也记录了其中的一些官方未交待的坑。总结步骤:1、下载依赖包gRPC。主要关注底下的protobuf和protol-gen-go包,


本文为go mod 简单搭建grpc服务demo实践。也记录了其中的一些官方未交待的坑。


总结步骤:


1、下载依赖包gRPC。主要关注底下的protobuf和protol-gen-go包,用于处理协议文件的。
2、下载protoc.exe执行文件,将bin目录配置到环境变量。该文件主要用于执行对.proto协议文件转为.pb.go对应语言文件。
3、安装插件protol-gen-go生成.exe可执行文件(可在依赖包对应目录下直接执行命令生成exe后拷贝出去),放入环境变量中,如刚刚设置的bin目录。
4、项目目录中编写如Hi.proto文件,并cmd进入该目录执行protoc --go_out=plugins=grpc:. Hi.proto命令,将在文件指定的包下生成Hi.pb.go文件(grpc接口协议文件代码)。
5、编写服务端实现协议文件中的结构体接口,客户端调用。

下来就来详细介绍。


一、下载依赖包gRPC


IDE创建项目目录grpcDemo,并配置代理。





然后我们下载依赖包就简单了,直接在项目目录下创建go.mod文件,如下:





然后基本的main.go里面写mian函数,执行命令go mod init。等待下载完,如下:





依赖包我们下完了。


我们打开看一下,能看到这个,





我们要的就是这两个插件,但是这还不算装完,因为protoc-gen-go并没有安装生成exe 文件,这个我们后面再讲。


github.com/golang/protobuf


github.com/golang/protobuf/protoc-gen-go


二、下载protoc.exe执行文件,将bin目录配置到环境变量


这个要自己额外地去下,地址看 这里 。下载解压将看到如下目录。protoc.exe文件就在bin文件夹下,把bin目录配置到环境变量。可以cmd下执行protoc --version看看是不是装好了。





该文件主要用于执行对.proto协议文件转为.pb.go对应语言文件。当然我们前面还讲到,这样还是不够的,还需要一个插件。


三、安装插件protol-gen-go生成.exe可执行文件


可在依赖包对应目录下直接执行go build命令生成exe后拷贝出去,放入环境变量中,如刚刚设置的bin目录和protoc.exe文件放一起(这里为图方便),当然也可以自行存在路径,然后把路径配置到环境变量即可。








四、编写如Hi.proto协议文件,并用命令转成对应语言(协议)文件


上面,我们把插件的工具都准备好了,意味着我们可以执行命令来处理协议文件了。


在项目目录中编写如Hi.proto文件,并cmd进入该目录执行protoc --go_out=plugins=grpc:. Hi.proto命令(注意这里IDE直接执行这个命令是不行的),将在文件指定的包下生成Hi.pb.go文件(grpc接口协议文件代码)。 这里的--go_out 必须protol-gen-go.exe的支持。








这里指定的包名就是将生成协议文件的文件夹。执行完命令后看到的文件:





五、编写服务端代码


实现协议中的接口,提供逻辑服务。





main文件自然必不可少。





我们启动服务端,监听8081端口。这里需要注意,如果直接run go build main.go有可能不成功。go build 整个项目倒是每次都成功的。





六、编写客户端


客户端和服务端也一样的先创建项目,go mod grpc依赖包 。只是客户端可以直接使用.pd.go文件,所以不用处理协议生成这个动作(装插件和写.proto文件后命名转换)。直接 拷贝Hi.pb.go文件 ,然后实现 客户端的调用代码 即可。其他注意点同上(必须go build 整个项目)。然后我们启动客户端就可以看到服务端的应答了。





好了,一个GRPC服务就写好了。



有疑问加站长微信联系(非本文作者)






推荐阅读
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
  • 今天我开始学习Flutter,并在Android Studio 3.5.3中创建了一个新的Flutter项目。然而,在首次尝试运行时遇到了问题,Gradle任务 `assembleDebug` 执行失败,退出状态码为1。经过初步排查,发现可能是由于依赖项配置不当或Gradle版本不兼容导致的。为了解决这个问题,我计划检查项目的 `build.gradle` 文件,确保所有依赖项和插件版本都符合要求,并尝试更新Gradle版本。此外,还将验证环境变量配置是否正确,以确保开发环境的稳定性。 ... [详细]
  • 如果程序使用Go语言编写并涉及单向或双向TLS认证,可能会遭受CPU拒绝服务攻击(DoS)。本文深入分析了CVE-2018-16875漏洞,探讨其成因、影响及防范措施,为开发者提供全面的安全指导。 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 我在使用Laravel 5.4时遇到了一个问题,当我发送Markdown格式的邮件时,输出结果并不如预期。以下是详细情况和解决方案。 ... [详细]
  • This feature automatically validates new regions using the AWS SDK, ensuring compatibility and accuracy. ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 大家好,全新的技术专栏《从零开始掌握容器云网络实战》正式上线。该专栏将系统地介绍容器云网络的基础知识、核心技术和实际应用案例,帮助读者全面理解和掌握容器云网络的关键技术与实践方法。 ... [详细]
author-avatar
kg9854997
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有