>백엔드 개발 >Golang >Go 미들웨어는 요청 핸들러가 반환한 오류를 어떻게 효과적으로 처리할 수 있나요?

Go 미들웨어는 요청 핸들러가 반환한 오류를 어떻게 효과적으로 처리할 수 있나요?

DDD
DDD원래의
2024-12-16 15:39:18421검색

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.

사용법

To 이 패턴을 사용하여 오류 처리 핸들러를 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))
}

이 예에서 loginHandler는 전통적인 미들웨어이고 errorHandle은 오류 처리 요청 핸들러입니다. errorHandler 미들웨어는 errorHandle을 래핑하고 오류가 적절하게 처리되도록 보장합니다.

위 내용은 Go 미들웨어는 요청 핸들러가 반환한 오류를 어떻게 효과적으로 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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