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