GIN框架_中间件

devtools/2024/12/22 23:45:25/

中间件

在Gin框架中,中间件(Middleware)指的是可以拦截http请求-响应生命周期的特殊函数,在请求-响应生命周期中可以注册多个中间件,每个中间件执行不同的功能,一个中间执行完再轮到下一个中间件执行。

中间件的常见应用场景如下:

  • 请求限速
  • api接口签名处理
  • 权限校验
  • 统一错误处理

Gin支持设置全局中间件和针对路由分组设置中间件,设置全局中间件意思就是会拦截所有请求,针对分组路由设置中间件,意思就是仅对这个分组下的路由起作用。

1. 中间件使用

   r := gin.New()// 通过use设置全局中间件// 设置日志中间件,主要用于打印请求日志r.Use(gin.Logger())// 设置Recovery中间件,主要用于拦截paic错误,不至于导致进程崩掉r.Use(gin.Recovery())r.GET("/test", func(ctx *gin.Context) {panic(errors.New("test error"))})r.Run(":8080")

2. 自定义中间件

使用Use可以使用gin自带的中间件或者其他第三方中间件,也可以自己开发中间件

package main
// 导入gin
import (
"github.com/gin-gonic/gin""log""time"
)// 自定义个日志中间件
func Logger() gin.HandlerFunc {return func(c *gin.Context) {t := time.Now()// 可以通过上下文对象,设置一些依附在上下文对象里面的键/值数据c.Set("example", "12345")// 在这里处理请求到达控制器函数之前的逻辑// 调用下一个中间件,或者控制器处理函数,具体得看注册了多少个中间件c.Next()// 在这里可以处理请求返回给用户之前的逻辑latency := time.Since(t)log.Print(latency)// 例如,查询请求状态吗status := c.Writer.Status()log.Println(status)}
}func main() {r := gin.New()// 注册上面自定义的日志中间件r.Use(Logger())r.GET("/test", func(c *gin.Context) {// 查询我们之前在日志中间件,注入的键值数据example := c.MustGet("example").(string)// it would print: "12345"log.Println(example)})// Listen and serve on 0.0.0.0:8080r.Run(":8080")
}

http://www.ppmy.cn/devtools/42157.html

相关文章

使用docker创建hadoop集群:Couldn‘t upload the file

运行的环境; Windows10 Docker Desktopdocker-hadoop 出现的问题如下: 解决方法 https://github.com/big-data-europe/docker-hadoop/issues/98

【Kubenetes】微服务治理:服务网格Istio安装搭建体验

文章目录 ServiceMesh介绍Istio解决方案安装Istio第一步 下载istio第二步 安装istio环境第三部 安装istio应用第四部 暴露到外部流量然后再下一步 把dashboard弄好 ServiceMesh介绍 扯淡环节 什么是服务网格?–服务间通信,可扩展性和灵活性服务网格的工作原理 --…

JavaScript非表单元素的属性操作方式

JavaScript可以用来操作非表单元素的属性,包括元素的样式、内容、属性等。 以下是一些常见的非表单元素属性操作方式的代码示例: 1. 操作元素样式(style)属性: // 获取元素 var element document.getElementById(m…

ijkplayer定制化编译

目录 一,背景介绍 1.1 编译环境 1.2 工具安装 2,编译定制 2.1 代码下载 2.2 初始化 2.3 编译openssl 2.4 编译ffmpeg 2.5 编译 ijkplayer 一,背景介绍 ijkplayer是一款由哔哩哔哩公司开发的基于FFmpeg的播放器SDK开源架构&#xff…

怎么删除pdf中的某一页?五种高效删除方法

怎么删除pdf中的某一页?PDF文件是我们在工作中经常需要处理的一类文件,它的格式很稳定,不易修改。但是,有时候我们可能需要对PDF文件进行编辑,比如删除其中的某一页。本文将为你介绍五种高效的方法,帮助你轻…

政务热线系统:传递民生温度

一、引言 在信息化、网络化的今天,政务服务方式正在发生深刻变革。政务热线系统作为政府联系群众的重要桥梁,承担着政策解读、民意收集、问题解决等多重功能。它不仅体现了政府的服务效率和水平,更是政府传递民生温度、体现为民情怀的重要渠…

浅析扩散模型与图像生成【应用篇】(二十五)——Plug-and-Play

25. Plug-and-Play: Diffusion Features for Text-Driven Image-to-Image Translation 该文提出一种文本驱动的图像转换方法,输入一张图像和一个目标文本描述,按照文本描述对输入图像进行转换,得到目标图像。图像转换任务其实本质上属于图像编…

【智能算法】清道夫优化算法(CFO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年,W Zhang受到清道夫自然行为启发,提出了清道夫优化算法(Cleaner Fish Optimization Algorithm, CFO)。 2.算法原理 2.1算法思想 CF…