> 백엔드 개발 > Golang > Go HTTP 요청 처리에서 오류를 적절하게 처리하고 반환하는 방법은 무엇입니까?

Go HTTP 요청 처리에서 오류를 적절하게 처리하고 반환하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-27 06:50:12
원래의
754명이 탐색했습니다.

How to Gracefully Handle and Return Errors in Go HTTP Request Handling?

오류 처리로 HTTP 요청 종료

Go에서 HTTP를 사용하여 API 서비스를 개발할 때 요청을 중단하고 반환해야 할 수도 있습니다. 특정 조건이 충족되지 않으면 오류 메시지가 표시됩니다. 이를 달성하기 위해 ServeHTTP() 메서드를 효과적으로 사용할 수 있습니다.

ServeHTTP()에서 반환

HTTP 요청을 종료하려면 ServeHTTP() 메서드에서 반환합니다. . 이렇게 하면 요청이 중단되고 fmt.Fprint(w, str) 또는 유사한 메서드를 통해 응답을 보낼 수 있습니다. 예:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Examine incoming params
    if !ok {
        str := `{"Result":"","Error":"No valide Var"}`
        fmt.Fprint(w, str)
        return
    }

    // Do normal API serving
})
로그인 후 복사

HTTP 오류 코드

입력 매개변수가 유효하지 않은 경우 대신 HTTP 오류 코드(예: 잘못된 요청의 경우 400)를 보냅니다. 기본값인 200 OK를 권장합니다. http.Error() 함수는 이 목적으로 사용될 수 있습니다:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Examine incoming params
    if !ok {
        http.Error(w, "Invalid input params!", http.StatusBadRequest) 
        return
    }

    // Do normal API serving
})
로그인 후 복사

오류 코드와 함께 JSON 데이터 반환

JSON 데이터를 오류 코드와 함께 다시 보내려면 오류 코드가 있는 경우 Header().Set() 메서드를 사용하여 Content-Type 헤더를 설정할 수 있으며 WriteHeader() 메서드를 사용하여 HTTP 상태를 설정할 수 있습니다. code:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Examine incoming params
    if !ok {
        w.Header().Set("Content-Type", "application/json")
        w.WriteHeader(http.StatusBadRequest) 
        str := `{"Result":"","Error":"No valide Var"}`
        fmt.Fprint(w, str)
        return
    }

    // Do normal API serving
})
로그인 후 복사

반환 전파

ServeHTTP() 외부에서 오류가 감지되면 ServeHTTP()가 반환될 수 있도록 오류 상태가 전파되어야 합니다. 간단한 접근 방식은 내부 함수에서 오류를 반환하는 것입니다. 그러면 ServeHTTP() 메서드도 반환됩니다. 예를 들어 사용자 정의 매개변수 유형을 사용하면

type params struct {
    // fields for your params 
}

func decodeParams(r *http.Request) (*params, error) {
    p := new(params)
    // decode params; if they are invalid, return an error:

    if !ok {
        return nil, errors.New("Invalid params")
    }

    // If everything goes well:
    return p, nil
}

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    p, err := decodeParams(r)
    if err != nil {
        http.Error(w, `Invalid input params!`, http.StatusBadRequest)
        return
    }

    // Do normal API serving
})
로그인 후 복사

이러한 접근 방식을 활용하면 HTTP 요청을 효과적으로 종료하고 필요할 때 의미 있는 오류 메시지를 반환할 수 있으므로 API 서비스가 잘못된 입력을 정상적으로 처리하고 오류 조건을 전달할 수 있습니다. 의도대로.

위 내용은 Go HTTP 요청 처리에서 오류를 적절하게 처리하고 반환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿