zoukankan      html  css  js  c++  java
  • 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")
    }
    
  • 相关阅读:
    [题解?]luogu_P1415拆分数列(dp(不懂
    [题解]luogu_P1070道路游戏(堆dp
    [题解]luogu_P2577午餐(贪心dp
    [题解]luogu_P2157学校食堂(状压dp
    [模板]线段树合并
    [题解]宝藏(状压
    [题解]NOI2010超级钢琴
    [题解]luogu_P2161_会场预约(线段树颜色相关
    【总结】LCA的4种求法
    SRM517-600加强版(DP)
  • 原文地址:https://www.cnblogs.com/Henry121/p/15627426.html
Copyright © 2011-2022 走看看