首页 >后端开发 >Golang >如何优雅地处理并返回 Go HTTP 请求处理中的错误?

如何优雅地处理并返回 Go HTTP 请求处理中的错误?

Linda Hamilton
Linda Hamilton原创
2024-11-27 06:50:12739浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn