您好,登錄后才能下訂單哦!
這篇文章主要介紹了Golang Gin局部和全局中間件怎么使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Golang Gin局部和全局中間件怎么使用文章都會有所收獲,下面我們一起來看看吧。
中間件是放在客戶端和服務端的中間。
當你的客戶端對某個接口發起一個請求,但是在到達接口2之前,這里是有一層中間件的處理。
一般常用的就是處理跨域,比如處理登入的驗證token,接口返回的信息比較敏感,說白了就是需要做鑒權。其實也就是防止別人刷你接口,拿到你的數據。
也就是你必須攜帶正確的token,讓中間件去做驗證,做完驗證之后再去處理這個接口的邏輯。
Gin框架允許開發者在處理請求的過程中,加入用戶自己的鉤子(Hook)函數(鉤子函數其實就是中間件)。
這個鉤子函數就叫中間件,中間件適合處理一些公共的業務邏輯 ,比如 登錄認證 、 權限校驗 、數據分頁、記錄日志、耗時統計等(比如微服務架構,你要去統計每個服務的metrics,比如請求的耗時,請求的狀態碼,也可以通過這個中間件去實現)
全局中間件對所有的路由都生效。
如果先注冊了路由器,我再去use這個中間件,發現這個中間件沒有生效,這個是正常的,因為中間件是在路由之后,那么注冊中間件就是失效的, 中間件一定要在路由之前注冊。
HandlerFunc這個其實也就是接受上下文對匿名函數。
type HandlerFunc func(*Context)
這里很像一個閉包的用法,我們只能在函數當中定義,但是沒有辦法去改變其一些變量。它不想讓你去改變其一些配置,它只允許你寫部分對實現。
import ( "fmt" "github.com/gin-gonic/gin" "net/http" ) //全局中間件,對所有路由生效,必須在路由注冊之前去use func MiddleWare() gin.HandlerFunc { return func(c *gin.Context) { //返回一個匿名函數 fmt.Println("我是一個中間件") } } func main() { r := gin.Default() r.Use(MiddleWare()) r.GET("/hello", func(c *gin.Context) { fmt.Println("執行了get方法") c.String(http.StatusOK, "hello") c.JSON(http.StatusOK, gin.H{ "msg": "success", "data": "hello", }) }) r.Run(":8000") }
[GIN-debug] Listening and serving HTTP on :8000 我是一個中間件 執行了get方法 [GIN] 2023/04/03 - 10:58:24 | 200 | 44.667μs | 127.0.0.1 | GET "/hello"
這里可以看到中間件是先執行,中間件比路由的handler是先執行的。
局部中間件就是對某個路由生效,這個就沒有順序了,因為它是跟著注冊路由一起走的。
import ( "fmt" "github.com/gin-gonic/gin" ) func MiddleWare() gin.HandlerFunc { return func(c *gin.Context) { fmt.Println("這里可以做一些身份驗證等") } } func main() { r := gin.Default() // 首頁無需驗證 r.GET("/index", func(c *gin.Context) { c.JSON(200, gin.H{"msg": "index 頁面"}) }) // home頁需要用戶登錄才能查看 r.GET("/home", MiddleWare(), func(c *gin.Context) { c.JSON(200, gin.H{"msg": "home 頁面"}) }) r.Run() }
可以看到在返回日志之前去執行了這個中間件,這就是一個局部中間件對用法。(先去執行中間件再去執行handler,這個局部中間件只對上面的路由生效)
[GIN-debug] Listening and serving HTTP on :8000 [GIN] 2023/04/03 - 11:14:11 | 200 | 56.791μs | 127.0.0.1 | GET "/index" 這里可以做一些身份驗證 [GIN] 2023/04/03 - 11:14:17 | 200 | 31.291μs | 127.0.0.1 | GET "/home"
某些中間件需要特殊處理的話,使用局部中間件就好了。
如果中間件有很多公用的方法,那么大部分情況就是全局的中間件,而不是局部的中間件。其實大部分使用場景都是使用全局中間件。
關于“Golang Gin局部和全局中間件怎么使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Golang Gin局部和全局中間件怎么使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。