golang gin 中常用中介軟體

2022-02-23 21:52:09 字數 2362 閱讀 9605

在gin的整個實現中,中介軟體可謂是gin的精髓。乙個個中介軟體組成一條中介軟體鏈,對http request請求進行攔截處理,實現了**的解耦和分離,並且中介軟體之間相互不用感知到,每個中介軟體只需要處理自己需要處理的事情即可。 gin中常用的中介軟體是:

在gin中,我們可以通過gin提供的預設函式,來構建乙個自帶預設中介軟體的*engine

r := gin.default()

default函式會預設繫結兩個已經準備好的中介軟體,它們就是logger 和 recovery,幫助我們列印日誌輸出和painc處理。

func default() *engine

從中我們可以看到,gin的中介軟體是通過use方法設定的,它接收乙個可變引數,所以我們同時可以設定多個中介軟體。

func (engine *engine) use(middleware ...handlerfunc) iroutes

到了這裡其實我們應該更加明白了,乙個gin的中介軟體,其實就是gin定義的乙個handlerfunc,而它在我們gin中經常使用,比如:

r.get("

/", func(c *gin.context) )

後面的func(c *gin.context)這部分其實就是乙個handlerfunc

在gin中,為我們提供了gin.basicauth幫我們生成基本認證的中介軟體,方便我們的開發。

r :=gin.default()

r.use(gin.basicauth(gin.accounts))

r.get("/

", func(c *gin.context) )

r.run(

":8080

")

我們新增乙個使用者名為admin,密碼是123456的賬戶,用於http 基本認證。現在我們執行啟動,訪問http://localhost:8080/,這時候只有我們輸入正確的使用者名稱和密碼,才能看到首頁,否則是看不到的,這樣我們就達到了授權的目的,就是這麼簡單。

其實在實際的專案開發中,我們基本上不太可能對所有的url都進行認證的,一般只有一些需要認證訪問的資料才需要認證,比如**的後台,那麼這時候我們就可以用分組路由來處理。

func main() )

admingroup := r.group("

/admin")

admingroup.use(gin.basicauth(gin.accounts))

admingroup.get(

"/index

", func(c *gin.context) )

r.run(

":8080")

}

現在我們執行訪問/首頁是可以正常顯示的,但是我們訪問/admin/index會提示輸入密碼,其實所有/admin/*下的url都會讓輸入密碼才能訪問,這就是我們分組路由的好處,我們通過把中介軟體加到/admin這個分組路由上,就可以達到我們的目的。

通過分組路由的控制,我們可以比較靈活的設定http認證,粒度可以自己隨意控制。

我們已經知道,gin的中介軟體其實就是乙個handlerfunc,那麼只要我們自己實現乙個handlerfunc,就可以自定義乙個自己的中介軟體。現在我們以統計每次請求的執行時間為例,來演示如何自定義乙個中介軟體。

func costtime() gin.handlerfunc 

}

以上我們就實現了乙個gin中介軟體,比較簡單,而且有注釋加以說明,這裡要注意的是c.next方法,這個是執行後續中介軟體請求處理的意思(含沒有執行的中介軟體和我們定義的get方法處理),這樣我們才能獲取執行的耗時。也就是在c.next方法前後分別記錄時間,就可以得出耗時。

有了自定義的中介軟體,我們就可以這麼使用。

func main() )

r.run(

":8080")

}

現在啟動程式,在瀏覽器裡開啟就可以看到如下日誌資訊了。

the request url / cost 26.533µs

通過自定義中介軟體,我們可以很方便的攔截請求,來做一些我們需要做的事情,比如日誌記錄、授權校驗、各種過濾等等。

express應用中常用中介軟體介紹

var strftime require strftime 時間格式化中介軟體,功能和moment.js差不多 var methodoverride require method override 請求方法重寫 html表單提交預設只支援get和post,通過方法重寫可以實現put提交 實現方法重寫...

中介軟體 訊息中介軟體學習總結

冪等 在程式設計中.乙個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。冪等函式,或冪等方法,是指可以使用相同引數重複執行,並能獲得相同結果的函式。這些函式 不會影響系統狀態,也不用擔心重複執行會對系統造成改變。例如,getusername 和settrue 函式就是乙個冪等函式....

中介軟體作業

主要檔案的 fctrl client linux.c this is sample code generated by rpcgen.these are only templates and you can use them as a guideline for developing your ow...