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