首頁 >後端開發 >Golang >Go中介軟體如何有效處理請求處理程序回傳的錯誤?

Go中介軟體如何有效處理請求處理程序回傳的錯誤?

DDD
DDD原創
2024-12-16 15:39:18423瀏覽

How Can Go Middleware Effectively Handle Errors Returned by Request Handlers?

具有錯誤回傳請求處理程序的中間件

Go 中的中間件隔離關注點並透過附加功能增強請求處理程序。傳統的中間件模式涉及在主請求處理程序之前和之後執行處理程序。但是,它缺乏對錯誤處理的支持,這可能很麻煩。

錯誤處理請求處理程序

為了解決這個問題,我們可以使用以下定義的錯誤處理請求處理程序:

type errorHandler func(http.ResponseWriter, *http.Request) error

這些處理程序允許我們直接返回錯誤,使錯誤處理更加直觀。

組合帶有錯誤處理處理程序的中間件

為了將中間件模式與錯誤處理處理程序結合起來,我們引入了一個額外的中間件,作為鏈中的最後一步:

func errorHandler(h MyHandlerFunc) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        err := h(w, r)
        if err != nil {
            // Handle error here
        }
    })
}

這個中間件包裝特殊類型的處理函數MyHandlerFunc,它回傳錯誤。

用法

要使用此模式,請使用 errorHandler中間件包裝錯誤處理處理程序並將其添加到中間件鏈的末尾:

moreMiddleware(myMiddleware(errorHandler(myhandleFuncReturningError)))

範例

考慮以下範例:

func loggingHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Before executing the handler.
        start := time.Now()
        log.Printf("Started %s %s", r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
        // After executing the handler.
        log.Printf("Completed %s in %v", r.URL.Path, time.Since(start))
    })
}

func errorHandle(w http.ResponseWriter, r *http.Request) error {
    w.Write([]byte(`Hello World from errorHandle!`))
    return nil
}

func main() {
    http.Handle("/", errorHandler(errorHandle))
    log.Fatal(http.ListenAndServe(":8080", nil))
}

在這個例子中,loggingHandler是一個傳統的中間件,而errorHandle是一個錯誤處理請求處理程序。 errorHandler 中間件包裝了 errorHandle 並確保正確處理錯誤。

以上是Go中介軟體如何有效處理請求處理程序回傳的錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn