攔截器是一種設計模式,允許在方法執行前後插入自訂行為,在 Go 中可以透過 net/http 中介軟體實現。它具有可擴展性、可重複使用性、可測試性等優點,可用於身份驗證、授權、快取、日誌記錄和自訂錯誤處理等場景。
#簡介
攔截器是一種設計模式,它允許在執行方法之前或之後插入自訂行為。在 Go 中,攔截器可以透過編寫 net/http
中介軟體來實現。
具體實作
以下是一個使用net/http
寫攔截器的範例:
package main import ( "fmt" "log" "net/http" ) func main() { // 创建一个新的中间件函数 logMiddleware := func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Println("Request received:", r.URL.Path) // 调用下一个处理程序 next.ServeHTTP(w, r) }) } // 创建一个新的 HTTP 处理程序 mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello, World!") }) // 将中间件应用到处理程序 http.Handle("/", logMiddleware(mux)) // 启动 HTTP 服务器 log.Println("Listening on port 8080") http.ListenAndServe(":8080", nil) }
原理
此攔截器使用net/http.HandlerFunc
建立一個新的HTTP 處理程序。此處理程序在請求到達原始處理程序之前和之後執行。在我們的範例中,logMiddleware
會在處理程序接收請求和呼叫下一個處理程序之前記錄收到的請求。
實戰案例
攔截器可用於各種場景,包括:
#優點
以上是揭秘 Golang 中的攔截器機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!