在 Golang 中可以利用攔截器在函數執行前後插入額外程式碼,場景包括日誌記錄、驗證、快取等。攔截器的實作方式是建立處理函數類型,然後建立攔截器函數接受處理程序函數並傳回一個新的包含額外邏輯的處理程序函數。在實戰中,我們可以使用攔截器記錄所有請求,方便調試和分析。
全面解析Golang 中的攔截器
簡介
是一種設計模式,允許在函數執行前後插入額外的程式碼。在 Golang 中,攔截器可以用作中間件,為 HTTP 請求處理添加自訂邏輯。
使用場景
攔截器可以用於各種場景,包括:
實作
在 Golang 中實作攔截器非常簡單。首先,我們需要建立一個HandlerFunc
類型,它接受ResponseWriter
和*Request
作為輸入並傳回一個錯誤:
type HandlerFunc func(rw http.ResponseWriter, r *http.Request) error
然後,我們可以建立一個攔截器函數,它接受處理程序函數並傳回一個新的處理程序函數:
func WithLogging(next HandlerFunc) HandlerFunc { return func(rw http.ResponseWriter, r *http.Request) error { // 在处理程序执行之前插入日志记录代码 log.Printf("Handling request: %s", r.URL.Path) if err := next(rw, r); err != nil { // 在处理程序执行之后插入日志记录代码 log.Printf("Error handling request: %v", err) return err } return nil } }
#實戰案例
讓我們考慮一個簡單的HTTP 伺服器,它支援兩個路由:
package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", IndexHandler) http.HandleFunc("/about", AboutHandler) // 使用拦截器记录所有请求 http.ListenAndServe(":8080", WithLogging(http.DefaultServeMux)) } func IndexHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Welcome to the home page!") } func AboutHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "About Us: We are a software development company.") }
運行伺服器後,每次請求都會記錄在控制台中,以便進行偵錯和分析。
結論
攔截器是 Golang 中用來增強函式執行的強大工具。透過使用上面描述的技術,我們可以輕鬆地為 HTTP 請求處理添加自訂邏輯,從而提高應用程式的靈活性和可維護性。
以上是全面解析 Golang 中的攔截器的詳細內容。更多資訊請關注PHP中文網其他相關文章!