go mod 写grpc服务

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

本文为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,并配置代理。
image.png

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

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

依赖包我们下完了。

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

我们要的就是这两个插件,但是这还不算装完,因为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看看是不是装好了。

image.png

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

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

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

image.png
image.png

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

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

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

image.png

image.png

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

五、编写服务端代码

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

image.png

main文件自然必不可少。
image.png

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

六、编写客户端

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

好了,一个GRPC服务就写好了。
image.png

前端使用grpc

相关文章
|
2月前
|
运维 网络协议 安全
长连接网关技术专题(十):百度基于Go的千万级统一长连接服务架构实践
本文将介绍百度基于golang实现的统一长连接服务,从统一长连接功能实现和性能优化等角度,描述了其在设计、开发和维护过程中面临的问题和挑战,并重点介绍了解决相关问题和挑战的方案和实践经验。
85 1
|
2月前
|
负载均衡 Java 中间件
使用Go语言构建高性能Web服务
Go语言作为一种快速、高效的编程语言,其在构建高性能Web服务方面具有独特优势。本文将探讨如何利用Go语言开发和优化Web服务,以实现更高的性能和可伸缩性。
|
1天前
|
Go 微服务
4. 参考 go 代码——服务注册与发现
4. 参考 go 代码——服务注册与发现
|
2天前
|
存储 负载均衡 监控
【Go 语言专栏】构建高可靠性的 Go 语言服务架构
【4月更文挑战第30天】本文探讨了如何利用Go语言构建高可靠性的服务架构。Go语言凭借其高效、简洁和并发性能,在构建服务架构中备受青睐。关键要素包括负载均衡、容错机制、监控预警、数据存储和服务治理。文章详细阐述了实现这些要素的具体步骤,通过实际案例分析和应对挑战的策略,强调了Go语言在构建稳定服务中的作用,旨在为开发者提供指导。
|
2天前
|
缓存 监控 测试技术
【Go语言专栏】使用Go语言构建高性能Web服务
【4月更文挑战第30天】本文探讨了使用Go语言构建高性能Web服务的策略,包括Go语言在并发处理和内存管理上的优势、基本原则(如保持简单、缓存和并发控制)、标准库与第三方框架的选择、编写高效的HTTP处理器、数据库优化以及性能测试和监控。通过遵循最佳实践,开发者可以充分利用Go语言的特性,构建出高性能的Web服务。
|
2天前
|
自然语言处理 Java 编译器
【Go语言专栏】Go语言中的gRPC框架应用
【4月更文挑战第30天】Go语言的gRPC是一个高性能RPC框架,基于HTTP/2和Protocol Buffers,支持多语言。其特点包括高性能、强类型和双向流。在Go中使用gRPC,需定义接口(如hello.proto),生成Go代码,实现服务器端(注册服务到gRPC服务器)和客户端(调用服务)。此外,gRPC还提供流、错误处理和拦截器等高级特性,适用于复杂通信场景。
|
4天前
|
运维 Serverless Go
Serverless 应用引擎产品使用之在阿里云函数计算中,Go语言的函数计算服务Go程序没有正确打包如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
9 0
|
2月前
|
安全 中间件 Go
Go语言Web服务性能优化与安全实践
【2月更文挑战第21天】本文将深入探讨Go语言在Web服务性能优化与安全实践方面的应用。通过介绍性能优化策略、并发编程模型以及安全加固措施,帮助读者理解并提升Go语言Web服务的性能表现与安全防护能力。
|
7月前
|
搜索推荐 Go 微服务
Go 语言怎么一键生成一个 gRPC 服务?
Go 语言怎么一键生成一个 gRPC 服务?
32 0
|
7月前
|
Go 微服务
Go 微服务工具包 Go kit 怎么集成 gRPC?
Go 微服务工具包 Go kit 怎么集成 gRPC?
54 0