HTTP 요청 종료 또는 중단
API 처리 중 오류를 처리하려면 요청을 종료하거나 중단하는 것이 중요합니다. log.fatal 및 os.Exit와 같은 옵션은 전체 서비스를 종료할 수 있지만 오류 메시지 전달을 방해합니다. 이 기사에서는 패닉, 연기, 복구 및 반환을 사용하는 대체 접근 방식을 살펴봅니다.
반환을 사용한 오류 처리
가장 간단한 방법은 ServeHTTP() 함수에서 반환하는 것입니다.
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // Check parameters if !ok { str := `{"Result":"","Error":"Invalid Parameters"}` fmt.Fprint(w, str) return // Terminates the request } // Normal API handling })
이 접근 방식은 기본 HTTP 핸들러 기능에 적합하지만 중첩된 기능 내에서는 기능만 존재하고 caller.
HTTP 오류 코드 및 사용자 정의 응답
기본 200 OK 응답 코드 대신 적절한 HTTP 오류 코드 반환을 고려하세요. http.Error()는 사용자 정의된 오류 메시지를 허용합니다.
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { if !ok { http.Error(w, `Invalid Input Parameters!`, http.StatusBadRequest) return } // Normal API handling })
더 세부적인 제어를 위해 사용자 정의 콘텐츠 유형과 응답 본문을 설정할 수 있습니다.
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { if !ok { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusBadRequest) str := `{"Result":"","Error":"Invalid Input Parameters"}` fmt.Fprint(w, str) return } // Normal API handling })
오류 전파 지연 및 복구 사용
ServeHTTP() 외부에서 오류 감지가 발생하면 지연 및 복구를 사용할 수 있습니다. 오류 상태를 메인 핸들러에 전파하려면:
type params struct { // Parameter fields } func decodeParams(r *http.Request) (*params, error) { p := new(params) defer func() { if r := recover(); r != nil { log.Println(r) return } }() // Parameter decoding if !ok { panic(errors.New("Invalid Parameters")) } return p, nil } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { p, err := decodeParams(r) if err != nil { http.Error(w, `Invalid Input Parameters!`, http.StatusBadRequest) return } // Normal API handling })
이 접근 방식에서 defer는 함수의 반환이나 패닉에 관계없이 복구() 함수가 실행되도록 보장하는 정리 함수를 등록합니다. decodeParams가 유효하지 않은 매개변수를 감지하면 패닉 상태가 되어 사실상 ServeHTTP()에서 오류를 반환하고 오류 메시지를 반환할 수 있습니다.
위 내용은 Go에서 HTTP 요청을 적절하게 처리하고 종료하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!