处理Go中HTTP错误需先检查err是否为nil,再验证StatusCode,最后设置超时并关闭Body。示例包括判断网络错误、状态码异常及配置Client超时,确保资源释放与重试逻辑。

在Go语言中处理HTTP请求错误,关键在于正确检查和解析http.Get、http.Post或使用http.Client发起请求时返回的错误。很多初学者只关注响应体,却忽略了网络层或HTTP状态码层面的错误,导致程序出现异常行为。
每次调用http.Get或client.Do时,第一个返回值是*http.Response,第二个是error。只要发生网络错误(如超时、DNS解析失败、连接拒绝),error就会非nil,此时response为nil,不能直接读取Body。
示例:
resp, err := http.Get("https://example.com")
if err != nil {
log.Printf("请求失败: %v", err)
return
}
defer resp.Body.Close()
即使err == nil,服务器也可能返回4xx或5xx状态码。Go不会自动将这些视为错误,需要手动判断resp.StatusCode。
立即学习“go语言免费学习笔记(深入)”;
常见做法:
resp.StatusCode与http.StatusOK等常量比较示例:
if resp.StatusCode != http.StatusOK {
body, _ := io.ReadAll(resp.Body)
log.Printf("HTTP错误 %d: %s", resp.StatusCode, string(body))
return
}
默认的http.Client没有超时,可能导致请求长时间挂起。应自定义Client并设置超时时间。
建议配置:
Transport设置TLS握手、空闲连接等示例:
client := &http.Client{
Timeout: 10 * time.Second,
}
resp, err := client.Get("https://api.example.com/data")
if err != nil {
log.Printf("请求出错: %v", err)
return
}
defer resp.Body.Close()
某些情况下,重定向过多会返回http.ErrTooManyRedirects,也属于err != nil的情况。此外,手动构建请求时URL格式错误、Header缺失等也会导致失败。
建议:
*url.Error)resp.Body,即使出错也要先判断resp是否非nil基本上就这些。Go的HTTP错误处理不复杂但容易忽略细节,关键是把网络错误和业务状态错误分开处理,加上合理超时和资源释放,就能写出健壮的客户端代码。
以上就是Golang如何处理HTTP请求错误的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号