首页 > 后端开发 > Golang > Go中间件链错误如何处理?

Go中间件链错误如何处理?

Barbara Streisand
发布: 2024-12-05 20:12:12
原创
508 人浏览过

How to Handle Errors in Go Middleware Chains?

带有错误返回处理程序的中间件模式

问题:如何将 Go 中间件模式与返回的请求处理程序结合起来错误?

答案:

Go 中的中间件模式允许创建可应用于 HTTP 处理程序的可重用组件。然而,传统的中间件函数本身并不处理错误。

要在中间件中启用错误处理,建议使用专门用于此目的的单独中间件函数。此函数应放置在中间件链的末尾,并处理链内处理程序返回的错误。

// Pattern for a middleware function that checks for errors from the next handler.
func errorHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        err := next.ServeHTTP(w, r)
        if err != nil {
            // Handle the error, e.g., by logging or returning an appropriate HTTP response.
        }
    })
}
登录后复制

示例:

组合错误 -使用原始示例中的日志记录中间件返回处理程序:

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

// Create a special error-aware logging middleware.
func loggingWithErrorHandler(next errorHandler) errorHandler {
    return func(w http.ResponseWriter, r *http.Request) error {
        // Before executing the handler.
        start := time.Now()
        log.Printf("Started %s %s", r.Method, r.URL.Path)
        err := next(w, r)
        // After executing the handler.
        log.Printf("Completed %s in %v", r.URL.Path, time.Since(start))
        return err
    }
}

// Define an error-returning handler func.
func errorHandlerFunc(w http.ResponseWriter, r *http.Request) error {
    w.Write([]byte("Hello World from errorHandlerFunc!"))
    return nil
}

// Assemble the middleware chain and error-aware middleware.
http.Handle("/", loggingWithErrorHandler(errorHandlerFunc))
登录后复制

此组合允许在保留错误处理的同时进行错误处理中间件模式的好处。包装的错误感知中间件将处理包装的处理程序返回的任何错误。

以上是Go中间件链错误如何处理?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板