綜述:Go 攔截器是透過中介軟體實現的一種處理函數前後邏輯的機制。原理:攔截器作為參數傳遞給函數,在函數執行前後的邏輯。實戰:透過建立記錄請求時間和校驗請求參數的攔截器,並將其連結到 HTTP 處理程序,展示了攔截器的應用。
Go 攔截器:一覽無餘
簡介
攔截器是一種在函數執行前後做一些處理的機制。在 Golang 中,可以使用中介軟體(middleware)來實作攔截器。
原理
攔截器透過將自己作為參數傳遞給要攔截的函數來運作。當函數被呼叫時,攔截器將在函數執行前後執行其邏輯。
實戰案例
我們建立一個簡單的HTTP 伺服器來示範如何使用攔截器:
package main import ( "log" "net/http" ) func main() { // 创建一个记录请求时间的拦截器 timeInterceptor := func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() defer func() { log.Printf("请求处理耗时:%fs", time.Since(start).Seconds()) }() next.ServeHTTP(w, r) }) } // 创建一个校验请求参数的拦截器 paramInterceptor := func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Query().Get("id") == "" { http.Error(w, "缺少参数:id", http.StatusBadRequest) return } next.ServeHTTP(w, r) }) } // 将拦截器与 HTTP 处理程序链接 handler := paramInterceptor(timeInterceptor(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello, World!")) }))) // 启动服务器 log.Fatal(http.ListenAndServe(":8080", handler)) }
在這個範例中,timeInterceptor
攔截器記錄請求處理時間,而paramInterceptor
攔截器校驗請求參數。透過將攔截器連結起來,我們可以在處理請求之前和之後執行這些邏輯。
總結
攔截器是增強 Golang 程式功能的強大工具。它們允許你在函數執行前後執行自訂程式碼,從而實現諸如記錄、驗證和授權等操作。
以上是Golang 攔截器: 一覽無餘的詳細內容。更多資訊請關注PHP中文網其他相關文章!