首页 > 后端开发 > Golang > 正文

如何在 Go 中优雅地处理和终止 HTTP 请求处理?

Patricia Arquette
发布: 2024-11-20 19:05:17
原创
753 人浏览过

How to Gracefully Handle and Terminate HTTP Request Processing in Go?

终止 HTTP 请求处理

在处理 HTTP 请求时,可能存在需要终止处理并发送错误响应的情况。这可以通过从 ServeHTTP() 方法返回来实现。

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Inspect incoming parameters
    if !IsValid(r.URL.Query()) {
        str := `{"Result":"","Error":"Invalid Parameters"}`
        fmt.Fprint(w, str)
        return
    }

    // Continue normal API processing
})
登录后复制

使用 HTTP 错误代码

对于更复杂的错误处理,建议返回适当的HTTP 错误代码而不是默认的 200好的。

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Inspect incoming parameters
    if !IsValid(r.URL.Query()) {
        http.Error(w, "Invalid Parameters", http.StatusBadRequest)
        return
    }

    // Continue normal API processing
})
登录后复制

JSON 格式的错误响应

以 JSON 格式提供更详细的错误响应:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Inspect incoming parameters
    if !IsValid(r.URL.Query()) {
        w.Header().Set("Content-Type", "application/json")
        w.WriteHeader(http.StatusBadRequest)
        str := `{"Result":"","Error":"Invalid Parameters"}`
        fmt.Fprint(w, str)
        return
    }

    // Continue normal API processing
})
登录后复制

从嵌套函数传播错误

如果错误处理在 ServeHTTP() 调用的函数中执行,必须返回错误状态以允许 ServeHTTP() 终止请求处理:

func decodeParams(r *http.Request) (*params, error) {
    p := new(params)
    // Decode parameters and check their validity

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

    return p, nil
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
    p, err := decodeParams(r)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // Continue normal API processing
}
登录后复制

以上是如何在 Go 中优雅地处理和终止 HTTP 请求处理?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板