zoukankan      html  css  js  c++  java
  • 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)
    }
    
  • 相关阅读:
    CF553C Love Triangles
    CF875C National Property
    【UOJ #210】【UER #6】寻找罪犯
    ICPC南昌网络赛I题Yukino With Subinterval
    进阶式-日志打印-构建器模式
    Java 对象类型
    mqtt 消息重传
    Java 关键字 final 知识点巩固
    MQTT 5.0 新特性
    emqx 认证详细
  • 原文地址:https://www.cnblogs.com/xujunkai/p/13352616.html
Copyright © 2011-2022 走看看