• 5gin中间件


    一 全局中间件

    所有请求都经过此中间件

    package main
    
    import (
       "fmt"
       "time"
    
       "github.com/gin-gonic/gin"
    )
    
    // 定义中间
    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() {
       // 1.创建路由
       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()
    }
    

    二 Next()方法

    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", "中间件")
          // 执行函数
          c.Next()
          // 中间件执行完后续的一些事情
          status := c.Writer.Status()
          fmt.Println("中间件执行完毕", status)
          t2 := time.Since(t)
          fmt.Println("time:", t2)
       }
    }
    
    func main() {
       // 1.创建路由
       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()
    }
    

    三 局部中间件

    package main
    
    import (
       "fmt"
       "time"
    
       "github.com/gin-gonic/gin"
    )
    
    // 定义中间
    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.GET("/ce", MiddleWare(), func(c *gin.Context) {
          // 取值
          req, _ := c.Get("request")
          fmt.Println("request:", req)
          // 页面接收
          c.JSON(200, gin.H{"request": req})
       })
       r.Run()
    }
    

    四 中间件练习

    定义程序计时中间件,然后定义2个路由,执行函数后应该打印统计的执行时间,如下:

    package main
    
    import (
       "fmt"
       "github.com/gin-gonic/gin"
       "time"
    )
    
    // 定义中间
    func myTime(c *gin.Context) {
       start := time.Now()
       c.Next()
       // 统计时间
       since := time.Since(start)
       fmt.Println("程序用时:", since)
    }
    
    func main() {
       // 1.创建路由
       r := gin.Default()
       // 注册中间件
       r.Use(myTime)
       // {}为了代码规范
       shoppingGroup := r.Group("/shopping")
       {
          shoppingGroup.GET("/index", shopIndexHandler)
          shoppingGroup.GET("/home", shopHomeHandler)
       }
       r.Run(":8080")
    }
    
    func shopIndexHandler(c *gin.Context) {
       time.Sleep(5 * time.Second)
       c.String(200,"ok")
    }
    
    func shopHomeHandler(c *gin.Context) {
       time.Sleep(3 * time.Second)
       c.String(200,"ok")
    }
    
  • 相关阅读:
    什么是TCP, UDP, HTTP, HTTPS协议?
    Django 自定义分页器
    PHP7.3安装event扩展
    深入浅出 PHP SPL(PHP 标准库)(转)
    Centos7安装redis5.0.7
    useradd命令详解(转)
    centos7.5下安装rabbitmq服务端以及php扩展
    php-fpm启动,重启,退出
    深度好文:PHP写时拷贝与垃圾回收机制(转)
    非对称加密openssl协议在php7实践
  • 原文地址:https://www.cnblogs.com/Henry121/p/15627426.html
Copyright © 2020-2023  润新知