Gin框架中的全局中间件与中间件传值

2024-09-04 15:12

本文主要是介绍Gin框架中的全局中间件与中间件传值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Gin是一个用Go语言编写的Web框架,它以高性能和简洁的API而闻名。在Gin中,中间件是一种在请求处理流程中执行特定任务的函数,这些任务可能包括日志记录、用户认证、请求限流等。中间件可以在全局范围内使用,也可以仅应用于特定的路由或路由组。

全局中间件

全局中间件会应用于所有的请求,无论请求的路径是什么。在Gin中,可以通过r.Use()方法来注册全局中间件。注册的中间件会按照它们注册的顺序执行。

中间件传值

Gin的中间件可以通过上下文(*gin.Context)来传递数据。上下文是一个包含了请求和响应的封装,它允许中间件和处理函数之间传递数据。使用c.Set()方法可以在上下文中存储数据,而c.Get()c.MustGet()方法则用于从上下文中获取数据。

示例代码解析

以下是一个使用Gin框架的示例代码,展示了如何定义全局中间件以及如何在中间件之间传递数据。

package mainimport ("fmt""github.com/gin-gonic/gin"
)// User 定义了一个用户结构体,包含姓名和年龄
type User struct {Name stringAge  int
}// m10 是一个中间件函数,用于设置上下文数据
func m10(c *gin.Context) {fmt.Println("m10...in")// 使用c.Set向gin的上下文中存储数据c.Set("num", 10)c.Set("user", User{"zhangsan", 18})// 调用c.Next()来执行下一个中间件或路由处理函数c.Next()fmt.Println("m10...out")
}// m11 是一个中间件函数,用于获取上下文数据
func m11(c *gin.Context) {fmt.Println("m11...in")// 使用c.Get从gin的上下文中获取数据,exists用于判断数据是否存在value, exists := c.Get("num")if exists {fmt.Println(value)}// c.MustGet确保数据一定存在,如果不存在会返回一个panicfmt.Println(c.MustGet("user"))_user, _ := c.Get("user")// 类型断言,将接口类型转换为User类型,并访问Name字段fmt.Println(_user.(User).Name)// 调用c.Next()来执行下一个中间件或路由处理函数c.Next()fmt.Println("m11...out")
}func main() {// 创建默认的gin路由器r := gin.Default()// 使用r.Use将m10和m11中间件绑定到每个请求中r.Use(m10, m11)// 定义路由/m10,响应GET请求,返回JSON数据r.GET("/m10", func(c *gin.Context) {c.JSON(200, gin.H{"msg": "m10"})})// 定义路由/m11,响应GET请求,返回JSON数据r.GET("/m11", func(c *gin.Context) {c.JSON(200, gin.H{"msg": "m11"})})// 启动gin服务器,监听localhost的8080端口r.Run("localhost:8080")
}

运行结果

当访问/m11路由时,控制台输出如下:

m10...in
m11...in
10
{zhangsan 18}
zhangsan
m11...out
m10...out

总结

通过这个示例,我们可以看到如何在Gin中使用全局中间件以及如何在中间件之间传递数据。m10中间件在请求处理流程的早期设置数据,而m11中间件则在稍后获取并使用这些数据。这种模式在处理跨请求的共享数据时非常有用。

这篇关于Gin框架中的全局中间件与中间件传值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136317

相关文章

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization