gin中间件篇

1. 全局中间件

  • 所有请求都经过此中间件
package mainimport ("fmt""time""github.com/gin-gonic/gin"
)// 定义中间
func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {t := time.Now()fmt.Println("中间件开始执行了")// 设置变量到Context的key中,可以通过Get()取c.Set("request", "中间件")status := c.Writer.Status()fmt.Println("中间件执行完毕", status)t2 := time.Since(t)fmt.Println("time:", t2)}
}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// 注册中间件r.Use(MiddleWare())// {}为了代码规范{r.GET("/ce", func(c *gin.Context) {// 取值req, _ := c.Get("request")fmt.Println("request:", req)// 页面接收c.JSON(200, gin.H{"request": req})})}r.Run()
}

输出结果:

 

2. Next()方法

package mainimport ("fmt""time""github.com/gin-gonic/gin"
)// 定义中间
func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {t := time.Now()fmt.Println("中间件开始执行了")// 设置变量到Context的key中,可以通过Get()取c.Set("request", "中间件")// 执行函数c.Next()// 中间件执行完后续的一些事情status := c.Writer.Status()fmt.Println("中间件执行完毕", status)t2 := time.Since(t)fmt.Println("time:", t2)}
}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// 注册中间件r.Use(MiddleWare())// {}为了代码规范{r.GET("/ce", func(c *gin.Context) {// 取值req, _ := c.Get("request")fmt.Println("request:", req)// 页面接收c.JSON(200, gin.H{"request": req})})}r.Run()
}

输出结果:

 

3. 局部中间件

package mainimport ("fmt""time""github.com/gin-gonic/gin"
)// 定义中间
func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {t := time.Now()fmt.Println("中间件开始执行了")// 设置变量到Context的key中,可以通过Get()取c.Set("request", "中间件")// 执行函数c.Next()// 中间件执行完后续的一些事情status := c.Writer.Status()fmt.Println("中间件执行完毕", status)t2 := time.Since(t)fmt.Println("time:", t2)}
}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()//局部中间键使用r.GET("/ce", MiddleWare(), func(c *gin.Context) {// 取值req, _ := c.Get("request")fmt.Println("request:", req)// 页面接收c.JSON(200, gin.H{"request": req})})r.Run()
}

效果演示:

4. 中间件练习

  • 定义程序计时中间件,然后定义2个路由,执行函数后应该打印统计的执行时间,如下:
package mainimport ("fmt""time""github.com/gin-gonic/gin"
)// 定义中间
func myTime(c *gin.Context) {start := time.Now()c.Next()// 统计时间since := time.Since(start)fmt.Println("程序用时:", since)
}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// 注册中间件r.Use(myTime)// {}为了代码规范shoppingGroup := r.Group("/shopping"){shoppingGroup.GET("/index", shopIndexHandler)shoppingGroup.GET("/home", shopHomeHandler)}r.Run(":8000")
}func shopIndexHandler(c *gin.Context) {time.Sleep(5 * time.Second)
}func shopHomeHandler(c *gin.Context) {time.Sleep(3 * time.Second)
}

效果演示:

 

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

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

相关文章

数据结构【DS】Ch8 排序

文章目录 插入排序选择排序归并&基数外部排序 插入排序 交换排序 选择排序 归并&基数 外部排序

Macos数据库管理软件:Navicat Premium for Mac 16.3.5中文版

Navicat Premium 16 for Mac是一款强大的数据库管理和开发工具,支持多种数据库系统,如MySQL、Oracle、SQL Server等。它提供了直观的用户界面和丰富的功能,使用户能够轻松地创建、管理和维护数据库。 软件下载:Navicat Premium fo…

NLP论文阅读记录 - 2022 | WOS 04.基于 XAI 的强化学习方法,用于社交物联网内容的文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 XAI-Base…

GPT应用_AutoGPT

项目地址:https://github.com/Significant-Gravitas/AutoGPT 1 功能 1.1 整体功能,想解决什么问题 单独使用 ChatGPT 时,只提供基本的聊天,无法实现复杂多步的功能,以及与其它应用交互,如果想提供某种功…

AWVS/Acunetix Premium v24.1.24高级版漏洞扫描器

Acunetix Premium 是一种 Web 应用程序安全解决方案,用于管理多个网站、Web 应用程序和 API 的安全。集成功能允许您自动化 DevOps 和问题管理基础架构。 Acunetix Premium:全面的 Web 应用程序安全解决方案 Web 应用程序对于企业和组织与客户、合作伙…

【PICO】【VRTK】PICO项目后打包后在头盔中运行时不追踪

【背景】 PICO项目打包后可以在头盔中运行,但是画面是贴脸移动的,无法发生有效的空间追踪。 【解决办法】 我的Unity版本是2021.3.30LTS,ProjectSettings中的NetFramework默认是2.1。改到NetFramework后再打包就正常了。

树莓派4B 刷ubuntu20.4.5配置 网线连接 找不到IP解决

跟随的教程: 【树莓派教程第一课 树莓派简介 十分钟玩转系列入门篇】 https://www.bilibili.com/video/BV16U4y1879Q/?p6&share_sourcecopy_web&vd_sourceb96879a51029063390138a2b464a7446 遇到的问题: 在我刷好ubuntu到系统卡并在根目录创建…

数学建模实战Matlab绘图

二维曲线、散点图 绘图命令:plot(x,y,’line specifiers’,’PropertyName’,PropertyValue) 例子:绘图表示年收入与年份的关系 ‘--r*’:--设置线型;r:设置颜色为红色;*节点型号 ‘linewidth’:设置线宽&#xff1…

【代码编辑器】VS Code安装下载教程及后续基本配置(一)[小白看这一篇足够了,手把手教会]

前言 Visual Studio Code(简称“VS Code” )是Microsoft在2015年4月30日[Build]开发者大会上正式宣布一个运行于 [Mac OS X]、[Windows]和[ Linux]之上的,针对于编写现代[Web]和[云应用]的跨平台[源代码编辑器],可在桌面上运行,并…

5G基站节能及数字化管理解决方案

截至2023年10月,我国5G基站总数达321.5万个,占全国通信基站总数的28.1%。然而,随着5G基站数量的快速增长,基站的能耗问题也逐渐日益凸显,基站的用电给运营商带来了巨大的电费开支压力,降低5G基站的能耗成为…

JVM工作原理与实战(二十二):方法区的垃圾回收

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、Java的内存管理和自动垃圾回收 二、方法区的垃圾回收 1.回收条件 2.手动触发垃圾回收 3.方法区的垃圾回收案例 总结 前言 JVM作为Java程序的运行环境,其负责解释和…

面试题总结-分布式总结

Nginx 篇 【1】简述一下什么是Nginx,它有什么优势和功能? Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。Nginx主要提供功能有 http服务…

了解Vue中日历插件Fullcalendar

实现效果如下图: 月视图 周视图 日视图 官方文档地址:Vue Component - Docs | FullCalendar 1、安装与FullCalendar相关的依赖项 npm install --save fullcalendar/vue fullcalendar/core fullcalendar/daygrid fullcalendar/timegrid fullcalend…

C++将信息输入到文件内

第一步检查文件是否打开&#xff0c;用到头文件&#xff1a; #include <fstream> #include <sstream> 文件打开的函数为 file.isopen() 信息输入到文件应该为 file << "" << value; 注意是file<< 如图 定义file ofstream f…

产品经理学习-产品运营《用户运营策略》

⽤户画像与⽤户运营策略 什么是用户画像 对产品运营而言&#xff0c;用户画像就是对用户的各种特征贴上标签通过这些标签将用户分成不同的用户群体 为用户提供有针对性的服务。 制作用户画像是为了专注和精准 使产品的服务对象更加聚焦&#xff0c;更加专注&#xff1b;根据产…

Rust - 可变引用和悬垂引用

可变引用 在上一篇文章中&#xff0c;我们提到了借用的概念&#xff0c;将获取引用作为函数参数称为 借用&#xff08;borrowing&#xff09;&#xff0c;通常情况下&#xff0c;我们无法修改借来的变量&#xff0c;但是可以通过可变引用实现修改借来的变量。代码示例如下&…

SAP S/4HANA 2023 Fully-Activated Appliance 虚拟机版介绍

注&#xff1a;市面上所有在售虚拟机均为拷贝本人所作的虚拟机&#xff0c;存在各种技术问题&#xff0c;请知悉。 SAP S4HANA 2023 FAA版本内置了四个Client&#xff1a; 1、000&#xff1a;SAP初始Client&#xff0c;原则上不能动&#xff1b; 2、100&#xff1a;只激活了US…

NG+WAF实现应用安全访问

一、基本概念 什么是waf&#xff1f; Web应用防火墙&#xff08;waf&#xff09;是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品&#xff0c;WAF是一种工作在应用层的、通过特定的安全策略来专门为Web应用提供安全防护的产品。 什么是ngx_lua_…

SpringMVC数据校验

导包 配置springmvc.xml <bean id"validator" class" org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"><property name"providerClass" value"org.hibernate.validator.HibernateValidator ">…

App 设计工具中的回调

目录 创建回调函数 回调函数编程 回调输入参数 在回调函数之间共享数据 在多个组件之间共享回调 以编程方式创建和分配回调 在代码中搜索回调 更改回调或断开与回调的连接 删除回调 示例&#xff1a;具有滑块回调的 App 回调是在用户与 App 中的 UI 组件交互时执行的…