Golang怎么处理HTTP响应_Golang HTTP响应处理教程【对比】

张开发
2026/4/18 5:47:42 15 分钟阅读

分享文章

Golang怎么处理HTTP响应_Golang HTTP响应处理教程【对比】
Go处理HTTP响应必须手动关闭resp.Body并检查StatusCode不关会导致连接池阻塞和文件描述符耗尽不查状态码会忽略404/500等业务错误Content-Type须以响应头为准不可硬猜编码。Go 处理 HTTP 响应核心就三件事别漏关 resp.Body、别跳过 StatusCode 检查、别硬猜 Content-Type。少做一步轻则数据错乱重则连接耗尽、服务假死。为什么必须手动调用 resp.Body.Close()Go 的 http.Client 不会自动关闭响应体——它把责任交给你。不关TCP 连接就卡在连接池里下次复用时可能读到上一次的残留数据更严重的是文件描述符持续增长最终触发 too many open files 错误整个服务夯住。错误写法body, _ : io.ReadAll(resp.Body) 后直接结束没关正确姿势在 err nil 分支开头立刻加 defer resp.Body.Close()注意resp 为 nil 时不能 defer即使你用 json.NewDecoder(resp.Body).Decode(v) 流式解析也得关——它不负责关如果后续要多次读取 body极少见得先用 io.ReadAll 拷贝出来再重新构造 bytes.NewReader怎么判断响应算“成功”而不是只看 err nilhttp.Get 或 client.Do 的 err 只管网络层连不上、超时、TLS失败等不管业务逻辑。404、500、422 全都返回 err nil但 resp.StatusCode 已经不是你想的那样了。别写 if err ! nil 就完事——这只能捕获连接失败漏掉全部 HTTP 错误码必须显式检查if resp.StatusCode 300或更常见地用 resp.StatusCode 400非 2xx 响应体往往含错误详情如 {error: invalid_token}建议读出来并包装进自定义 error重定向301/302默认自动跟随若需拦截得配 CheckRedirect304 响应体为空但头里有缓存信息别直接 ReadAll 报 panic怎么安全解析 resp.Body 而不崩在编码或格式上响应头里的 Content-Type 是唯一可信依据。别假设是 UTF-8也别靠 string(bodyBytes) 硬转——BOM、GBK、ISO-8859-1 都可能真实存在。 Trenz AI驱动的社交电商营销平台专为TikTok Shop设计

更多文章