Gin 中間件,回調函數,數據共享


Gin 中間件

Gin 框架允許開發者在處理請求的過程中,加入用戶自己的鈎子(Hook)函數。這個鈎子函 數就叫中間件,中間件適合處理一些公共的業務邏輯,比如登錄認證、權限校驗、數據分頁、 記錄日志、耗時統計等。
通俗的講:中間件就是匹配路由前和匹配路由完成后執行的一系列操作

ctx.Next()調用該請求的剩余處理程序

  • 中間件里面加上 ctx.Next()可以讓我們在路由匹配完成后執行一些操作,先完成回調函數后面的程序,在執行c.Next()下面的語句

  • //統計一個請求的執行時間
    func initMiddleware(c *gin.Context) {
    	start := time.Now().UnixNano()
    	fmt.Println("1-我是一個中間件")
    	//調用該請求的剩余處理程序
    	c.Next()//去執行回調函數外的語句
    	fmt.Println("2-我是一個中間件")
    	end :=time.Now().UnixNano()
    	fmt.Println(end-start)
    
    }
    
    

    一個路由可以配置多個中間件

    全局中間件

	r := gin.Default()
	//全局中間件
	r.Use(initMiddlewareOne,initMiddleware)

中間件和對應控制器之間共享數據

設置值:

ctx.Set("username", "張三")

獲取值:

	//_ :不接受err
	//獲取值
	username, _ := c.Get("username")
	//get返回的是控接口類型,需要轉換為string類型
	v,ok :=username.(string)
	if ok == true{
		//成功:
		c.String(200,"用戶列表:"+v)
	}else {
		c.String(200,"用戶列表:獲取用戶失敗")
	}

gin.Default()

默認使用了 Logger 和 Recovery 中間件,其中: • Logger 中間件將日志寫入 gin.DefaultWriter,即使配置了 GIN_MODE=release。 • Recovery 中間件會 recover 任何 panic。如果有 panic 的話,會寫入 500 響應碼。 如果不想使用上面兩個默認的中間件,可以使用 gin.New()新建一個沒有任何默認中間件的 路由。

gin 中間件中使用 goroutine

當在中間件或 handler 中啟動新的 goroutine 時,不能使用原始的上下文(c *gin.Context), 必須使用其只讀副本(c.Copy())

	//定義一個goroutine統計日志
	cCp :=ctx.Copy()
	go func() {
		time.Sleep(5 * time.Second)
		fmt.Println("Done! in path " + cCp.Request.URL.Path)
	}()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM