首頁 > 後端開發 > Golang > 如何優雅地處理並傳回 Go HTTP 請求處理中的錯誤?

如何優雅地處理並傳回 Go HTTP 請求處理中的錯誤?

Linda Hamilton
發布: 2024-11-27 06:50:12
原創
753 人瀏覽過

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 header,使用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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板