>백엔드 개발 >Golang >Go 미들웨어 체인의 오류를 처리하는 방법은 무엇입니까?

Go 미들웨어 체인의 오류를 처리하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-05 20:12:12487검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.