Gin 中间件,回调函数,数据共享


Gin 中间件

Gin 框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。这个钩子函 数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、 记录日志、耗时统计等。
通俗的讲:中间件就是匹配路由前和匹配路由完成后执行的一系列操作

ctx.Next()调用该请求的剩余处理程序

  • 中间件里面加上 ctx.Next()可以让我们在路由匹配完成后执行一些操作,先完成回调函数后面的程序,在执行c.Next()下面的语句

  • //统计一个请求的执行时间
    func initMiddleware(c *gin.Context) {
    	start := time.Now().UnixNano()
    	fmt.Println("1-我是一个中间件")
    	//调用该请求的剩余处理程序
    	c.Next()//去执行回调函数外的语句
    	fmt.Println("2-我是一个中间件")
    	end :=time.Now().UnixNano()
    	fmt.Println(end-start)
    
    }
    
    

    一个路由可以配置多个中间件

    全局中间件

	r := gin.Default()
	//全局中间件
	r.Use(initMiddlewareOne,initMiddleware)

中间件和对应控制器之间共享数据

设置值:

ctx.Set("username", "张三")

获取值:

	//_ :不接受err
	//获取值
	username, _ := c.Get("username")
	//get返回的是控接口类型,需要转换为string类型
	v,ok :=username.(string)
	if ok == true{
		//成功:
		c.String(200,"用户列表:"+v)
	}else {
		c.String(200,"用户列表:获取用户失败")
	}

gin.Default()

默认使用了 Logger 和 Recovery 中间件,其中: • Logger 中间件将日志写入 gin.DefaultWriter,即使配置了 GIN_MODE=release。 • Recovery 中间件会 recover 任何 panic。如果有 panic 的话,会写入 500 响应码。 如果不想使用上面两个默认的中间件,可以使用 gin.New()新建一个没有任何默认中间件的 路由。

gin 中间件中使用 goroutine

当在中间件或 handler 中启动新的 goroutine 时,不能使用原始的上下文(c *gin.Context), 必须使用其只读副本(c.Copy())

	//定义一个goroutine统计日志
	cCp :=ctx.Copy()
	go func() {
		time.Sleep(5 * time.Second)
		fmt.Println("Done! in path " + cCp.Request.URL.Path)
	}()


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM