首页 > 后端开发 > Golang > Go中如何有效终止HTTP请求?

Go中如何有效终止HTTP请求?

Susan Sarandon
发布: 2024-11-25 08:18:13
原创
783 人浏览过

How to Effectively Terminate HTTP Requests in Go?

在 Go 中终止 HTTP 请求

在 Go 中,您可以通过从 HTTP 处理程序的 ServeHTTP() 方法返回来终止 HTTP 请求。这种方法允许您结束请求并向客户端发送响应。

示例:

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

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

注释:

  • 当您的 API 出现问题时,请考虑返回 HTTP 错误代码,而不是默认的 200 OK输入参数无效。为此,请使用 http.Error() 函数。

示例:

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

    // Continue normal API serving
})
登录后复制
  • 要进行更多控制,您可以设置标头和返回 JSON 错误响应

示例:

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

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

错误传播:

如果您在外部遇到错误的 ServeHTTP() 时,您必须返回该错误状态,以便 ServeHTTP() 可以终止请求。

示例:

type params struct {
    // Field definitions for your parameters
}

func decodeParams(r *http.Request) (*params, error) {
    p := new(params)
    // Decode parameters
    if !ok {
        return nil, errors.New("Invalid params")
    }
    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 // Terminate the request
    }

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

以上是Go中如何有效终止HTTP请求?的详细内容。更多信息请关注PHP中文网其他相关文章!

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