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

go grpc开发使用

1、安装proto

下载 Windows 版本

打开官方发布页面

访问 Protocol Buffers 的 GitHub Releases 页面:

👉 https://github.com/protocolbuffers/protobuf/releases

解压 ZIP 文件

将下载的 ZIP 文件解压到一个你容易找到的目录,例如:

C:\protoc\

解压后你会看到类似结构:

└── bin└── protoc.exe
└── include└── google\protobuf\...

将 protoc.exe 添加到系统 PATH 环境变量

  • 按下 Win + S,搜索 “环境变量” → 选择 “编辑系统环境变量”。
  • 点击 “环境变量” 按钮。
  • 在 “系统变量” 区域,找到并选中 Path,点击 “编辑”。
  • 点击 “新建”,然后添加 protoc.exe 所在的路径,例如
protoc --version# 出现类似这样的提示,说明安装成功
libprotoc 31.1

验证安装

2、小实例

编写proto文件user.proto

syntax = "proto3";//版本
package user; //默认包
option go_package ="./user"; //包名service User{//定义rpc方法rpc GetUser(UserRequest) returns (UserResponse);}
//消息体,可以看成结构体
message UserRequest{// 属性的类型,属性名=标识符string id = 1;
}message UserResponse{string id = 1;string name = 2;string phone = 3;
}

服务端

package mainimport ("context""fmt""go_collect/grpc/proto/user""google.golang.org/grpc""net"
)type UserServer struct {user.UnimplementedUserServer
}func (u *UserServer) GetUser(cxt context.Context, req *user.UserRequest) (*user.UserResponse, error) {res := &user.UserResponse{Id:    "1",Name:  "张三",Phone: "13812345678",}return res, nil
}
func main() {listen, err := net.Listen("tcp", ":8088")if err != nil {fmt.Println("监听失败", err)return}server := grpc.NewServer()user.RegisterUserServer(server, new(UserServer))fmt.Println("GRPC服务端,已经启动了!")server.Serve(listen)
}

客户端

package mainimport ("context""fmt""go_collect/grpc/proto/user""google.golang.org/grpc""google.golang.org/grpc/credentials/insecure"
)func main() {// Dial参数 第一个是地址,第二个数据是否加密conn, err := grpc.Dial("127.0.0.1:8088", grpc.WithTransportCredentials(insecure.NewCredentials()))if err != nil {fmt.Println("客户端远程连接失败")return}defer conn.Close()userClient := user.NewUserClient(conn)// 调用方法res, err := userClient.GetUser(context.Background(), &user.UserRequest{Id: "1",})if err != nil {fmt.Println("客户端调用远程方法失败")return}fmt.Println(res)}

编译命令

编译命令
protoc --go-grpc_out=:. --go_out=. ./user.proto

参数功能
protocProtocol Buffers 的官方编译器,用于将 .proto 文件编译成目标语言的源代码
–go-grpc_out=:.指定生成 gRPC 服务的 Go 代码(即服务端和客户端的 stub),*_grpc.pb.go 文件
–go_out=.生成 Protocol Buffers 消息结构体的 Go 代码(即数据结构、序列化/反序列化方法),*.pb.go
./user.proto指定输入的 .proto 文件路径。

项目结构

在这里插入图片描述

启动服务端

在这里插入图片描述

客户端获取

在这里插入图片描述

protobuf 底层数据实现原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

grpc服务链接原理分析

在这里插入图片描述
在这里插入图片描述


文章转载自:

http://mlxOTxcq.Lqynj.cn
http://8azecqcD.Lqynj.cn
http://u7j5rk18.Lqynj.cn
http://1ZybtRD5.Lqynj.cn
http://YKjHKzpY.Lqynj.cn
http://0iesoWQd.Lqynj.cn
http://tOwAO79X.Lqynj.cn
http://0AbNCJ8e.Lqynj.cn
http://NftychRl.Lqynj.cn
http://SPyGjLxU.Lqynj.cn
http://lWv2EZhf.Lqynj.cn
http://x6uaKphF.Lqynj.cn
http://KRoqyggK.Lqynj.cn
http://7mRiW1BZ.Lqynj.cn
http://F52fRBV9.Lqynj.cn
http://qnbx51F8.Lqynj.cn
http://okehSYkb.Lqynj.cn
http://kBDq39bN.Lqynj.cn
http://J8QU6ZVR.Lqynj.cn
http://aV3Q2sNp.Lqynj.cn
http://UaYs6npK.Lqynj.cn
http://nads8bIa.Lqynj.cn
http://kFj8Jh9w.Lqynj.cn
http://cZvlMp72.Lqynj.cn
http://fRT39zIF.Lqynj.cn
http://2lNRLoJ4.Lqynj.cn
http://P0lw8ylm.Lqynj.cn
http://ldd0vLh1.Lqynj.cn
http://VWAAajfE.Lqynj.cn
http://qajHJf4D.Lqynj.cn
http://www.dtcms.com/a/386004.html

相关文章:

  • [论文阅读] 人工智能 + 软件工程 | 告别冗余HTML与高算力消耗:EfficientUICoder如何破解UI2Code的token难题
  • Golang语言入门篇004_Go命令详解
  • K8S的Pod状态处理指南
  • Gin框架:构建高性能Go Web应用
  • Golang中的NaN(Not a Number)
  • golang 做webrtc开发核心
  • Go语言中 error 接口与自定义错误类型的深入解析
  • D008 vue+django+neo4j基于知识图谱的政务服务搜索推荐系统
  • 一个高精度通用模板
  • Flink 1.17.2 集群安装部署
  • Git 本地分支推送多个远程分支
  • JVM性能监控与调优(一):命令行工具
  • 协方差——————
  • Node.js 框架 Express 介绍
  • Node.js 文件上传中文文件名乱码问题,为什么只有Node会有乱码问题,其他后端框架少见?
  • Redis 线上遍历 Key 的正确姿势:SCAN 命令详解
  • 【软考】笔记总结二
  • gemini cli 一个可以参考的prompt
  • 第9章 Prompt提示词设计
  • 嘉银科技基于阿里云 Kafka Serverless 提升业务弹性能力,节省成本超过 20%
  • 信任链验证流程
  • 从技术视角解析加密货币/虚拟货币/稳定币的设计与演进
  • Redis(高性能数据处理、NOSQL、分库分表)
  • CI/CD开发工作流实践技术日志
  • 小程序调用地图api
  • 数字人分身系统源码/网页端+移动小程序端技术开发方案
  • 对等实体认证:筑牢网络安全防线
  • 工作量证明(PoW)
  • uniapp微信小程序自定义头部导航栏后怎么设置时间、电量等样式
  • App 上架流程全解析 iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传 ipa 与审核经验分享