0

0

如何使用Golang网络请求错误处理_捕获HTTP请求异常

P粉602998670

P粉602998670

发布时间:2026-01-05 00:23:17

|

949人浏览过

|

来源于php中文网

原创

Go处理HTTP异常需检查resp和err双返回值、设超时、分类处理错误:网络层可重试,4xx不重试,5xx有限重试,JSON解析失败需查格式;应封装含context、重试、状态码校验的健壮请求函数。

如何使用golang网络请求错误处理_捕获http请求异常

Go语言中处理HTTP请求异常,核心在于区分错误类型、及时检查返回值、合理设置超时,并避免忽略关键错误。下面从常见错误场景出发,给出实用的处理方式。

检查resperr双返回值

Go的http.DefaultClient.Do()http.Get()都返回*http.Responseerror。必须同时检查两者——err非空说明网络层失败(如DNS解析失败、连接超时),而errnilresp.StatusCode非2xx,属于业务层错误。

  • 永远不要只检查err == nil就认为请求成功
  • 即使errnil,也要用defer resp.Body.Close()释放资源
  • http.StatusText(resp.StatusCode)或直接比对状态码判断语义错误(如404、500)

主动设置超时,避免永久阻塞

默认的http.Client没有超时,可能卡住goroutine。应显式配置Timeout或使用context.WithTimeout

  • 推荐用context控制:传入带超时的ctxclient.Do(req.WithContext(ctx))
  • 可分别设置TransportTimeoutIdleConnTimeout等,精细控制各阶段耗时
  • 超时错误类型是*url.Error,其Err字段常为net.OpError,可通过errors.Is(err, context.DeadlineExceeded)准确判断

分类处理不同错误类型

HTTP错误不是单一类型,需根据错误底层原因采取不同策略:

BgSub
BgSub

免费的AI图片背景去除工具

下载

立即学习go语言免费学习笔记(深入)”;

  • 网络层错误(如connection refusedi/o timeout):通常重试有意义,但要加退避机制
  • 客户端错误(4xx):多数是请求问题(参数错、未授权),重试无用,应记录并修正逻辑
  • 服务端错误(5xx):可能是临时故障,适合有限重试(如3次,指数退避)
  • JSON解析错误json.Unmarshal失败):说明响应体格式异常,需检查Content-Type或服务端返回逻辑

封装健壮的请求函数示例

把重复逻辑(超时、重试、状态码检查、body读取)封装成工具函数,提升复用性和可维护性:

  • 接收context.Context、URL、期望状态码范围(如200–299)
  • 内置简单重试逻辑(仅针对网络错误和5xx),避免无限循环
  • 统一解包resp.Body,自动处理gzip,返回字节流或结构体
  • 错误信息包含原始URL、状态码、底层错误,便于排查

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

177

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

225

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

336

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

207

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

388

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

194

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

189

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

191

2025.06.17

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

1

2026.01.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.1万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号