gin框架中的中介軟體
阿新 • • 發佈:2021-12-10
全域性中介軟體
所有請求都經過此中介軟體
- 中介軟體中設定值
func MiddleWare() gin.HandlerFunc { return func(context *gin.Context) { t := time.Now() fmt.Println("中介軟體開始執行了") // 設定變數到Context的key中,可以通過Get獲取 context.Set("request", "中介軟體") status := context.Writer.Status() fmt.Println("中介軟體執行完畢", status) t2 := time.Since(t) fmt.Println("time: ", t2) } }
- 處理方法中取值
func middleHello(context *gin.Context) {
// 從中介軟體設定的變數中取值
value, ok := context.Get("request")
if ok {
fmt.Println(value)
}
context.JSON(http.StatusOK, gin.H{"request": value})
}
輸出結果:
中介軟體開始執行了
中介軟體執行完畢 200
time: 0s
中介軟體
注意: 請注意黑色的資料裡面有一步算時間差沒有執行(需要學習Next就懂了)
context.Next()方法
func MiddleWare() gin.HandlerFunc { return func(context *gin.Context) { t := time.Now() fmt.Println("中介軟體開始執行了") // 設定變數到Context的key中,可以通過Get獲取 context.Set("request", "中介軟體") status := context.Writer.Status() fmt.Println("中介軟體執行完畢", status) // 請求前執行 context.Next() // 請求後執行 t2 := time.Since(t) // 計算函式處理請求時間 fmt.Println("time: ", t2) } }
執行結果:
中介軟體開始執行了
中介軟體執行完畢 200
中介軟體
time: 1.014342s
路由組使用中介軟體
`adminRouterGroup.Use(middleware.MiddleWare())
區域性中介軟體
router.GET("/middle-hello", middleware.MiddleWare(), middleHello)
中介軟體練習
定義程式計時中介軟體,然後定義2個路由,執行函式後應該列印統計的執行時間,如下:
- 自定義程式耗時中介軟體
func MyTime() gin.HandlerFunc { return func(context *gin.Context) { startTime := time.Now() context.Next() d := time.Since(startTime) fmt.Println("程式耗時:", d) } }
請求兩個路由執行結果:
程式耗時: 3.0023744s
[GIN] 2021/12/10 - 10:54:26 | 200 | 3.0029489s | 127.0.0.1 | GET "/admin/shop"
程式耗時: 1.0132144s
[GIN] 2021/12/10 - 10:54:37 | 200 | 1.0132144s | 127.0.0.1 | GET "/middle-hello"
中介軟體推薦