没有合适的资源?快使用搜索试试~ 我知道了~
首页GoLang之使用Context控制请求超时的实现
资源详情
资源评论
资源推荐

GoLang之使用之使用Context控制请求超时的实现控制请求超时的实现
主要介绍了GoLang之使用Context控制请求超时的实现,文中通过示例代码介绍的非常详细,对大家的学习或
者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
起因起因
之前接触了一个需求:提供一个接口,这个接口有一个超时时间,如果超时了返回超时异常;这个接口中调用其他的接
口,如果调用超时了,所有请求全部结束。
在这个接口中,我使用了go协程去调用其他接口,所以不仅涉及到请求的超时控制,而且还涉及到父协程对子协程的控
制问题。在翻阅了一些资料之后,了解到了Context的基本知识。
Context
Context是golang.org.pkg下的一个包,类型是接口类型。主要功能有
父协程控制所有的子协程父协程控制所有的子协程
Context可以通过context.Background()或者 context.TODO()创建一个空的context。两个区别在于TODO
context可以进行派生,创建出子context。context有四种不同的子context:
(1)WithCancel:方法入参是一个context;返回值是一个带有新Done的父context的副本,以及cancel函数。当调用
cancel函数时,通道将被关闭。关闭规则:会先关闭内部的接收通道;通道关闭了接收该通道的操作会立即返回(即done返
回的通道),并且context会向它所有的子值传递信号,如果子context还有子context,那这个撤销信号就会一级一级传递下
去。最后这个context会断开其与父context的连接。
(2)WithDeadline和WithTimeout(本次问题解决就使用的是这个):WithDeadline或者WithTimeout的功能极为相似。都是
返回可以被撤销的Context子值。它们不但可以被手动撤销,还会依据在生成是给定的过期时间,自动地进行定时撤销。
WithDeadline是设置一个时间点,时间对上了就到期。WithTimeout是设置一段时间,比如几秒,过个这段时间,就超
时。其实底层的WithTimeout也是通过WithDeadline实现的。WithTimeout的调用就等于WithDeadline(parent,
time.Now().Add(timeout))(其中parent是父级context)
(3)WithValue:入参是父级parent,存储的键和存储的值。返回的是一个带有数据的Context。这个Context是不能被撤销
的。撤销的信号在传递的时候会跳过这个Context。
协程间共享数据协程间共享数据
协程间共享数据主要使用的就是WithValue生成的子Context,这个Context存的值在其他的协程中也能读取到。可以用做
数据的共享。
超时取消协程超时取消协程
主要用到的是WithDeadline生成的子Context以及Go中HttpClient请求中的context字段(下文会有描述)
取消超时请求的模型取消超时请求的模型
调度模型调度模型




















weixin_38727087
- 粉丝: 6
- 资源: 966
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- Xilinx SRIO详解.pptx
- Informatica PowerCenter 10.2 for Centos7.6安装配置说明.pdf
- 现代无线系统射频电路实用设计卷II 英文版.pdf
- 电子产品可靠性设计 自己讲课用的PPT,包括设计方案的可靠性选择,元器件的选择与使用,降额设计,热设计,余度设计,参数优化设计 和 失效分析等
- MPC5744P-DEV-KIT-REVE-QSG.pdf
- 通信原理课程设计报告(ASK FSK PSK Matlab仿真--数字调制技术的仿真实现及性能研究)
- ORIGIN7.0使用说明
- 在VMware Player 3.1.3下安装Redhat Linux详尽步骤
- python学生信息管理系统实现代码
- 西门子MES手册 13 OpcenterEXCR_PortalStudio1_81RB1.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0