gin框架06

gin中間件

1.gin可以構(gòu)建中間件,但它只對注冊過的路由函數(shù)起作用
2.對于分組路由,嵌套使用中間件,可以限定中間件的作用范圍
3.中間件分為全局中間件,單個路由中間件和群中間件
4.gin中間件必須是一個gin.HandlerFunc類型


中間件.png

######### 應(yīng)用
登錄、權(quán)限

全局中間件

所有請求都經(jīng)過此中間件

package main

import (
"fmt"
"github.com/gin-gonic/gin"
"time"
)
// 定義中間件
func MiddleWare()gin.HandlerFunc{
    return func(c *gin.Context) {
        t:=time.Now()
        fmt.Println("中間件開始執(zhí)行了")
        // 設(shè)置變量到Context的key中,可以通過Get()取
        c.Set("request","中間件")
        // 執(zhí)行中間件
        c.Next()
        // 響應(yīng)
        status := c.Writer.Status()
        fmt.Println("中間件執(zhí)行完成",status)
        t2:= time.Since(t)
        fmt.Println("time:",t2)
    }
}

func main() {
    // 1. 創(chuàng)建路由器
    r := gin.Default()
    // 1.注冊中間件
    r.Use(MiddleWare())
    // {}為了代碼規(guī)范
    {
        r.GET("/middleware", func(c *gin.Context) {
            // 取值
            req,_:=c.Get("request")
            fmt.Println("request:",req)
            // 頁面接收
            c.JSON(200,gin.H{"request:":req})
        })
    }

    // 3.監(jiān)聽端口,默認8080
    r.Run(":8000")
}
結(jié)果.png

終端.png

Next()方法

看源碼


next.png

遍歷了handle

全局中間件和局部中間件
package main

import (
"fmt"
"github.com/gin-gonic/gin"
"time"
)
// 定義中間件
func MiddleWare()gin.HandlerFunc{
    return func(c *gin.Context) {
        t:=time.Now()
        fmt.Println("中間件開始執(zhí)行了")
        // 設(shè)置變量到Context的key中,可以通過Get()取
        c.Set("request","中間件")
        // 執(zhí)行中間件
        c.Next()
        // 響應(yīng)
        status := c.Writer.Status()
        fmt.Println("中間件執(zhí)行完成",status)
        t2:= time.Since(t)
        fmt.Println("time:",t2)
    }
}

func main() {
    // 1. 創(chuàng)建路由器
    r := gin.Default()
    // 1.注冊中間件
    r.Use(MiddleWare())
    // {}為了代碼規(guī)范
    {
        r.GET("/middleware", func(c *gin.Context) {
            // 取值
            req,_:=c.Get("request")
            fmt.Println("request:",req)
            // 頁面接收
            c.JSON(200,gin.H{"request:":req})
        })
        // 根據(jù)路由后面定義的局部中間件
        r.GET("/middleware2", MiddleWare(),func(c *gin.Context) {
            // 取值
            req,_:=c.Get("request")
            fmt.Println("request:",req)
            // 頁面接收
            c.JSON(200,gin.H{"request:":req})
        })
    }

    // 3.監(jiān)聽端口,默認8080
    r.Run(":8000")
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容