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)
    }
    
  • 相关阅读:
    界面控件DevExpress Blazor UI组件v20.2新版亮点:集成Visual Studio
    如何打印超长图片
    使用you-get库下载视频自动化
    数组求最值和平均数的算法
    如何删除git所有提交历史
    计算机图形学应知应会
    通过终端登录FTP服务器的方式
    局域网内通过ARP欺骗获取他人账号密码
    如何在局域网下用他人的流量上网
    XAMPP下的项目进行内网穿透时的注意点
  • 原文地址:https://www.cnblogs.com/xujunkai/p/13352616.html
Copyright © 2011-2022 走看看