• Go语言Gin-4中间件


    5.gin 中间件

    5.1 全局中间件

    package main
    
    import (
    	"fmt"
    	"github.com/gin-gonic/gin"
    	"time"
    )
    
    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() {
    	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()
    	}
    }
    中间件开始执行!
    中间件执行完毕 200
    time 20.312µs
    request: 中间件
    

    5.2 Next方法

    • Next()函数,仅可以在中间件使用,它在调用函数中执行挂起的函数。
    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() {
    	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()
    	}
    }
    中间件开始执行!
    request: 中间件   // 先执行request中间件
    中间件执行完毕 200
    time 37.267µs
    

    5.3局部中间件

    func main() {
    	r := gin.Default()
    	// 注册中间件
    	{
        // MiddleWare 局部中间件
    		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()
    	}
    }
    

    5.4中间件练习

    package main
    
    import (
        "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)
    }
    
  • 相关阅读:
    Linux文件与目录管理(一)
    Linux文件基本属性
    软工实践总结
    微软必应词典的调查与研究
    调研安卓开发环境的发展演变
    软件工程的预定目标
    学习进度第5周
    机械学习----KNN算法
    MyBatis:简介、第一个程序01(纯小白非常实用)
    解决数据库连接时区的问题
  • 原文地址:https://www.cnblogs.com/xujunkai/p/13352616.html
Copyright © 2020-2023  润新知