Go 采用 time.After 实现超时控制
文章目录
场景:
假设业务中需调用服务接口A,要求超时时间为5秒,那么如何优雅、简洁的实现呢?
我们可以采用
select
+time.After
的方式,十分简单适用的实现。
首先,我们先看time.After()
源码:
|
|
time.After()
表示time.Duration
长的时候后返回一条time.Time
类型的通道消息。那么,基于这个函数,就相当于实现了定时器,且是无阻塞的。
超时控制的代码实现:
|
|
我们使用channel
来接收协程里的业务返回值。
select
语句阻塞等待最先返回数据的channel
,当先接收到time.After
的通道数据时,select
则会停止阻塞并执行该case
的代码。此时就已经实现了对业务代码的超时处理。
文章作者 Jioby
发布日期 2018-03-27
上次更新 2018-03-27
许可协议 CC BY-NC-ND 4.0(请看转载要求)
原文链接 https://shockerli.net/post/golang-select-time-implement-timeout/