当前位置: 首页 > news >正文

Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)

1.protobuf简介

protobuf 即 Protocol Buffers,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的,占用空间小,但也带来了可读性差的缺点。protobuf 在通信协议和数据存储等领域应用广泛。例如著名的分布式缓存工具 Memcached 的 Go 语言版本groupcache 就使用了 protobuf 作为其 RPC 数据格式。

Protobuf 在 .proto 定义需要处理的结构化数据,可以通过 protoc 工具,将 .proto 文件转换为 C、C++、Golang、Java、Python 等多种语言的代码,兼容性好,易于使用。

2. gPRC 简介

RPC 是远程过程调用 (Remote Procedure Call) 的缩写形式,gRPC 最初是由 Google 创建的,高性能、开源通用、跨语言和平台 的 RPC 框架。

gRPC 使用 Protocol Buffers 定义服务,Protocol Buffers 是一个强大的二进制序列化工具集和语言。

3.安装proto

官方Github链接:Releases · protocolbuffers/protobuf

进入链接后选择自己电脑所属系统的文件压缩包并下载解压到自己GOPATH所在目录

可通过命令行输入echo %GOPATH%或者go env命令找到GOPATH所在目录

目录组成

GOPATH目录下一般由三个文件夹组成,分别是bin,src,pkg。

bin文件夹放的一般是你编译之后产生的可执行程序;

src文件夹放的一般是你的代码;

pkg文件夹放的一般是你的mod扩展;

如果你的GOPATH目录下没有这三个文件夹也没关心,直接新建就好了,再回到系统环境变量中把PATH中添加上你的GOPATH目录。

如何更改环境变量信息

之后,就可以修改自己的环境变量信息了,把解压好的protoc.exe的运行程序移动到bin文件夹中。

到这一步,你的protoc就已经下载好了,可以打开命令行窗口输入protoc --version测试一下如果输出的是

代表你的系统环境变量中PATH下关于GOPATH的目录路径可能有问题,可以尝试修改一下,如果输出的是

代表你的proto的配置已经完成了

4. 安装Go插件

需要安装两个 Go 插件:

protoc-gen-go-grpc:https://pkg.go.dev/google.golang.org/grpc/cmd/protoc-gen-go-grpc
protoc-gen-go:https://pkg.go.dev/google.golang.org/protobuf/cmd/protoc-gen-go
protoc-gen-go-grpc 工具用于在 gRPC 的 protobuf 定义文件中生成服务端的 Go 语言绑定(name_grpc.pb.go 文件)。

protoc-gen-go 是一个 protoc 插件,用于为 Protocol Buffer 语言的 proto2 和 proto3 版本生成 Go 代码(name.pb.go 文件)。

使用 go install 命令安装这两个插件,:

$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

安装后在 ${GOPATH}/bin 目录下将会多出两个命令工具:protoc-gen-go-grpc、protoc-gen-go。

运行 protoc 命令生成 Go 代码时,该命令内部将会在 PATH 环境变量中查找 protoc-gen-go-grpc 和 protoc-gen-go 这两个命令。

5.编写.proto文件生成.go文件

在你编写完.proto后缀的文件之后,打开终端进入到项目中.proto文件所在文件夹运行命令

protoc --go_out=. *.proto

之后在该文件夹下就会生成.pb.go后缀的文件,紧接着运行命令

 protoc --go-grpc_out=. *.proto

之后就会在该文件夹下生成_grpc.pb.go后缀的文件。

如此一来,你的项目就成功部署到了gRPC服务。

相关文章:

  • Babel 基础使用指南:从安装到编译的完整流程
  • 操作系统: 第三章节 :中断和处理机调度
  • Python Day 22 学习
  • 基于Dify实现对Excel的数据分析
  • 容器技术 20 年:颠覆、重构与重塑软件世界的力量
  • 每日一题洛谷P8615 [蓝桥杯 2014 国 C] 拼接平方数c++
  • jna总结1
  • CSS 盒子模型与元素定位
  • Docker、ECS 与 K8s 网段冲突:解决跨服务通信中的路由问题
  • armv7 backtrace
  • Qt开发经验 --- 避坑指南(14)
  • 数据库与SQL核心技术解析:从基础到JDBC编程实战
  • 软件体系结构(Software Architecture)
  • 【漫话机器学习系列】252.零损失(0-1 Loss)
  • 大数据时代的安全挑战——数据泄露如何悄然发生?
  • 基于PySyft与TensorFlow的医疗数据协同分析系统实现教程
  • 力扣刷题Day 46:搜索二维矩阵 II(240)
  • 【系统架构师】2025论文《系统可靠性设计》【含记忆口诀】
  • 用ffmpeg压缩视频参数建议
  • path环境变量满了如何处理,分割 PATH 到 Path1 和 Path2
  • 法律顾问被控配合他人诈骗酒店资产一审判8年,二审辩称无罪
  • 学者三年实地调查被判AI代笔,论文AI率检测如何避免“误伤”
  • 韶关一企业将消防安装工程肢解发包,广东住建厅:罚款逾五万
  • 美官方将使用华为芯片视作违反美出口管制行为,外交部回应
  • 商务部召开全国离境退税工作推进会:提高退税商店覆盖面,扩大入境消费
  • 回望星河深处,唤醒文物记忆——读《发现武王墩》