go的net/http設計的⼀⼤特點就是特別容易構建中介軟體。gin也提供了類似的中介軟體。需要注意的是中介軟體只對註冊過的路由函式起作⽤。對於分組路由,巢狀使⽤中介軟體,可以限定中介軟體的作⽤範圍。
// 下面2個中介軟體作用:
// 統計處理的延時
// 列印處理的狀態
// 中介軟體1 直接是乙個處理函式
func
middlewarefunc1
(c *gin.context)
// 中間間2 通過閉包的方式返回乙個處理函式,但是可以傳入外部變數,方便靈活
func
middlewarefunc2
(debug bool
) gin.handlerfunc
else
t := time.
now(
) fmt.
println
("before middleware"
)//設定request變數到context的key中,通過get等函式可以取得
c.set(
"request"
,"client_request"
)//傳送request之前
c.next()
//傳送request之後
// 這個c.write是responsewriter,我們可以獲得狀態等資訊
// 中介軟體1
func
middleware1
() gin.handlerfunc
}// 中介軟體2
func
middleware2
() gin.handlerfunc
}func
main()
中介軟體最⼤的作⽤,莫過於⽤於⼀些記錄log,錯誤handler,還有就是對部分接⼝的鑑權。下⾯就實現⼀個簡易的鑑權中介軟體。
)// 模擬私有資料
var secrets = gin.h
,"yang"
: gin.h
,"edu"
: gin.h,}
func
main()
))authorized.
get(
"/secrets"
,func
(c *gin.context))}
else)}
})}
go的中介軟體
輸出2019 07 15 17 19 50 middleware1 1 2019 07 15 17 19 50 middleware2 1 handel func 2019 07 15 17 19 50 middleware2 2 2019 07 15 17 19 50 middleware1 2 ...
Go語言的Http 中介軟體實現
當你正在構建乙個web應用程式有可能要執行許多 甚至全部 的http請求一些共享功能,你可能想記錄每乙個request,gzip壓縮的每個response,或者做一些繁重的處理或者快取檢查。實現這個共享功能的一種方法是將其設定為中介軟體,他可以作為乙個獨立的程式,在正常的handlers處理之前。根...
go 中介軟體 設計模式實現
中介軟體實現粗略版本 var piplc piplcontext type contion func bool type itemfn func carry contion,item contion contion pipl 管道 type pipl struct piplecmapret 管道re...