中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang?Gin局部和全局中間件怎么使用

發布時間:2023-04-27 11:41:43 來源:億速云 閱讀:120 作者:iii 欄目:開發技術

這篇文章主要介紹了Golang Gin局部和全局中間件怎么使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Golang Gin局部和全局中間件怎么使用文章都會有所收獲,下面我們一起來看看吧。

中間件

Golang?Gin局部和全局中間件怎么使用

中間件是放在客戶端和服務端的中間。 

當你的客戶端對某個接口發起一個請求,但是在到達接口2之前,這里是有一層中間件的處理。

一般常用的就是處理跨域,比如處理登入的驗證token,接口返回的信息比較敏感,說白了就是需要做鑒權。其實也就是防止別人刷你接口,拿到你的數據。

也就是你必須攜帶正確的token,讓中間件去做驗證,做完驗證之后再去處理這個接口的邏輯。

  • Gin框架允許開發者在處理請求的過程中,加入用戶自己的鉤子(Hook)函數(鉤子函數其實就是中間件)。

  • 這個鉤子函數就叫中間件,中間件適合處理一些公共的業務邏輯 ,比如 登錄認證 、 權限校驗 、數據分頁、記錄日志、耗時統計等(比如微服務架構,你要去統計每個服務的metrics,比如請求的耗時,請求的狀態碼,也可以通過這個中間件去實現)

1. 全局中間件  

全局中間件對所有的路由都生效。
如果先注冊了路由器,我再去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是先執行的。

2. 局部中間件

局部中間件就是對某個路由生效,這個就沒有順序了,因為它是跟著注冊路由一起走的。

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局部和全局中間件怎么使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜南县| 吉木乃县| 浦北县| 蕲春县| 社会| 措勤县| 保亭| 新丰县| 衡东县| 繁昌县| 莫力| 南乐县| 抚顺市| 丰原市| 始兴县| 大石桥市| 五华县| 平泉县| 普陀区| 舟曲县| 杭州市| 龙泉市| 崇义县| 霞浦县| 安化县| 东乡县| 克东县| 太仆寺旗| 河间市| 故城县| 吴旗县| 通海县| 濮阳市| 贵溪市| 黔西| 西畴县| 巴彦县| 科尔| 广昌县| 秀山| 濉溪县|