1. 程式人生 > 其它 >gin框架中的中介軟體

gin框架中的中介軟體

全域性中介軟體

所有請求都經過此中介軟體

  1. 中介軟體中設定值
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)
	}
}
  1. 處理方法中取值
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個路由,執行函式後應該列印統計的執行時間,如下:

  1. 自定義程式耗時中介軟體
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"

中介軟體推薦


github連結