go-zero的快速实战(完整)

news2024/11/19 7:22:11

在这里插入图片描述

微服务框架 go-zero 的基本介绍

go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。

go-zero 中的 api,rpc,数据库等涉及的代码,都可以给我们一键生成,无需耗费我们什么精力

只需要在生成的代码中填入自己的配置以及逻辑即可。

go-zero 框架具有以下显著特点:

强大的工具支持:尽可能少的代码编写,通过 goctl 工具一键生成多端代码。
极简的接口:完全兼容 net/http,支持中间件,方便扩展。
高性能:面向故障编程,弹性设计,内建服务发现、负载均衡、限流、熔断、降载等微服务治理能力。
自动校验:API 参数自动校验,超时级联控制,自动缓存控制。
链路跟踪:统计报警等,稳定保障了疫情期间每天的流量洪峰。

go-zero官方架构图

在这里插入图片描述

go-zero 的环境搭建 go

项目安装前置工具:

  • 安装 etcd 工具(下载,解压,即可运行):https://github.com/etcd-io/etcd/releases
    在这里插入图片描述
  • 安装 protoc 工具
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
  • 安装 goctl 工具
go install github.com/zeromicro/go-zero/tools/goctl@latest

zero 的快速实战 rpc , api ,model 部分

环境安装完毕之后,我们就可以来进行实战了,刚才有说到 go-zero 是一个集成了各种工程实践的 web 和 rpc 框架,那么我们就可以来设计 web 部分的接口和 rpc 部分的接口

场景示例

例如有一个订单场景,我们需要查询某个租户的地址,另外在租户系统这边,需要添加租户
创建租户模块tenant目录

先来定义 rpc 接口步骤:

  1. 创建rpc目录
  2. 编写tenant.proto文件
    提供两个 rpc 接口
    1. getTenant 获取租户信息
    2. addTenant 添加租户
//tenant.proto文件
syntax = "proto3";

package tenant;

option go_package = "./tenant";

message TidReq {
    string name = 1;
}
message TenantRsp {
    // 租户名称
    string id = 1;
    // 租户名称
    string name = 2;
    // 用户地址
    string addr = 3;
}

message addTenantReq {
    // 租户名称
    string name = 1;
    // 用户地址
    string addr = 2;
}


message addTenantRsp {
    // 租户 id
    string id = 1;
}

service Tenant {
    rpc getTenant(TidReq) returns(TenantRsp);
    rpc addTenant(addTenantReq) returns(addTenantRsp);
}
//使用 goctl 工具生成代码
protoc -I . --go_out=. --go-grpc_out=. rpc/tenant.proto
goctl rpc protoc rpc/tenant.proto --go_out=. --go-grpc_out=. --zrpc_out=.

这个时候,关于 rpc 自动生成的部分就完成了,生成的代码目录图:
在这里插入图片描述

定义 api 接口步骤:

  1. 创建api目录
  2. 编写tenant.api文件
//tenant.api文件
//定义一个 Get 方法,url 为 / api /order/get/:name 的 http 接口
type (
        OrderReq {
                Name string `path:"name"`
        }

        OrderReply {
                Id   string `json:"id"`
                Name string `json:"name"`
                Addr string `json:"addr"`
        }
)
service order {
        @handler getOrder
        get /api/order/get/:name (OrderReq) returns (OrderReply)
}
//使用 goctl 工具生成代码
goctl api go -api tenant.api  -dir .

这个时候,关于 web 部分自动生成的部分就完成了,生成的代码目录图:
在这里插入图片描述

数据库步骤:

  1. 创建 model 目录
//生成model文件
goctl model mongo --type Group --dir model

这个时候,关于 model 部分自动生成的部分就完成了,生成的代码目录图:
在这里插入图片描述

填充逻辑层和配置

  1. 修改 ymall/order/api/internal/config/config.go ,Config struct 中加上 rpc 的配置
    TenantRpc zrpc.RpcClientConf
  2. 修改 project/tenant/api/internal/svc/servicecontext.go ,加上 rpc 的上下文
    TenantRpc tenant.Tenant
    TenantRpc:tenant.NewTenant(zrpc.MustNewClient(c.TenantRpc)),

在这里插入图片描述

  • 修改 mymall/tenant/api/internal/logic/getorderlogic.go ,对逻辑层加上咱们自定义的逻辑,调用 rpc 的接口获取租户信息
    在这里插入图片描述
  • 修改 mymall/tenant/rpc/etc/tenant.yaml ,加上数据源和数据表的配置
    在这里插入图片描述
  • 修改 mymall/tenant/rpc/internal/svc/servicecontext.go ,添加关于 mysql 的上下文
    Model model.TenantInfoModel
    Model:model.NewTenantInfoModel(sqlx.NewMysql(c.DataSource)),
    在这里插入图片描述

效果验证

注意:运行之前需要先运行之前安装的etcd.exe

  • 打开终端 1 操作 rpc:
go run tenant.go
  • 同时打开终端 2 操作 api:
go run tenant.go

控制台输出:

在这里插入图片描述

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

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

相关文章

计算机毕业设计 自习室座位预约系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

RTC、ADC

RTC RTC(Real-Time Clock)是实时时钟模块,用于跟踪实际时间(年、月、日、时、分、秒),即使在系统断电或处于低功耗模式下也能保持时间的准确性。 特点 时间和日期跟踪低功耗模式支持可编程闹钟和定时器备…

贪心算法day31|56. 合并区间、738. 单调递增的数字(整数与字符串的转换)、贪心刷题总结

贪心算法day31|56. 合并区间、738. 单调递增的数字、贪心刷题总结 56. 合并区间738. 单调递增的数字贪心刷题总结 56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 …

大模型微调 - 自动加载预训练模型

大模型微调 - 自动加载预训练模型 flyfish AutoModelFor 是 Hugging Face transformers 库中的一个通用接口,这里用的是modelscope ,用于自动加载预训练模型,涵盖多种任务的模型。AutoModelFor 后面接不同的任务名称会对应不同的模型架构&a…

基于 CycleGAN 对抗网络的自定义数据集训练

目录 生成对抗网络(GAN) CycleGAN模型训练 训练数据生成 下载开源项目CycleGAN 配置训练环境 开始训练 模型测试 可视化结果 生成对抗网络(GAN) 首先介绍一下什么是GAN网络,它是由生成器(Generator…

工具、环境等其他小问题归纳

此篇文章内容会不定期更新,仅作为学习过程中的笔记记录 一、查询Windows 10环境下python版本与安装路径 若电脑成功安装了python环境,不小心忘了版本。 I、查询版本 1、cmd窗口快捷查询 Win R 输入cmd 进入窗口; 直接输入 python --version …

2024.9.13 系统运维

学习目标:了解 云计算运维 “云计算是中国的骄傲!” 企业向云服务商租用云服务(省钱、省心、省力) 云计算:公有云、私有云(大公司,数据隐私性)、混合云(私有云跑重要…

前端刷新进不了登录页面

报错props.ts:15 Uncaught (in promise) SyntaxError: Unexpected token 错误截图: 原因:谷歌浏览器版本过低,升级浏览器 比如这边版本就过低了

ThinkCMF框架任意内容包含漏洞的讲解

本文来自无问社区,更多网安资料可前往查看http://www.wwlib.cn 背景描述 ThinkCMF是一款基于PHPMYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。 ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可…

CSP 2023 提高级第一轮单项选择题解析

CSP 2023 提高级第一轮单项选择题解析 第1题第2题第3题第4题第5题第6题第7题第8题第9题第10题第11题第12题第13题第14题第15题 第1题 在 Linux 系统终端中,以下哪个命令用于创建一个新的目录?(B) A.newdir B.mkdir C.create D.mkfold 解析:记…

部署Tomcat和抓包

部署Tomcat 复制文件到桌面 查看自己是否有java环境,下图所示是有的,若没有需另行下载 解压tomcat文件 tar -xzvf apache-tomcat-7.0.96.tar.gz 下列为tomcat文件的几个重要文件 进入到bin文件中 启动tomcat ./startup.sh 可以先用本机查看是否启动…

【PostgreSQL里的restartpoint重启点】

不知道大家有没有关注过,配置文件里archive_cleanup_command参数的注释部分有着这么一句"command to execute at every restartpoint",意思是在每个restartpoint时执行的命令。 提起checkpoint大家可能比较熟悉,对于这个restartpoint&#xff…

英文软件汉化中文软件教程asi exe dll 等汉化教程

相信大家在使用国际软件的时候,会经常碰到英文类型的软件 或者玩一些游戏使用一些工具,也基本都是外网的,那么对于用户来讲 就会非常的不方便! 小编为大家整理了一些国内大佬出的的英文软件汉化中文软件的视频教程 教程分为EX…

HarmonyOS开发实战( Beta5.0)滑动视频自动播放案例实践

鸿蒙HarmonyOS开发往期文章必看: HarmonyOS NEXT应用开发性能实践总结 最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) 介绍 本示例主要介绍视频列表滑动到屏幕中间自动播放场景&…

[项目] -登录框

前言 各位师傅大家好,我是qmx_07,今天来给大家讲解登录框的小练习,就此SDK的相关学习就此结束 登录框 对话框绘制 通过添加DIaLog对话框,添加 static test文本、Edit Control输入框、Button按钮,制作登录框passwor…

快速入门编写一个Java程序

一、jdk配置 下载完jdk后需要配置环境变量 以下是其步骤 1、我的电脑-属性-高级系统设置-环境变量 2、在系统变量中新建JAVA_HOME环境变量,指向jdk的安装目录 3、编辑path环境变量,新建%JAVA_HOME%\bin 4、打开Dos命令行,任意目录下敲入j…

CGAL and the Boost Graph Library

CGAL and the Boost Graph Library 许多几何数据结构都可以解释为图,因为它们由顶点和边组成。对于halfedge数据结构、多面体曲面、arrangement以及二维三角剖分类来说,情况都是如此。利用对偶性,人们也可以将面解释为顶点,相邻面…

AcWing119 袭击

目录 AcWing119 袭击题目描述背景输入输出数据范围 题解解法优化 打赏 AcWing119 袭击 题目描述 背景 特工进入据点突袭发电站,已知所有发电站的位置和所有特工的降落位置,求任意特工距离任意核电站的最短距离 输入 第一行一个整数 T T T&#xff0…

基于SpringBoot实现SpringMvc上传下载功能实现

SpringMvc上传下载功能实现 1.创建新的项目 1)项目信息填写 Spring Initializr (单击选中)Name(填写项目名字)Language(选择开发语言)Type(选择工具Maven)Group()JDK(jdk选择17 &…

深度学习——D1(环境配置)

课程内容 W-H-W 资源 AI地图 物体检测和分割 样式迁移 人脸合成 文字生成图片 预测与训练 本地安装