场景:
假设业务中需调用服务接口A,要求超时时间为5秒,那么如何优雅、简洁的实现呢?我们可以采用select+time.After的方式,十分简单适用的实现。time.After()表示time.Duration长的时候后返回一条time.Time类型的通道消息。那么,基于这个函数,就相当于实现了定时器,且是无阻塞的。超时控制的代码实现:
package mainimport ("fmt""time"
)func main() {ch := make(chan string)go func() {fmt.Println("go func start....")time.Sleep(time.Second * 2)ch <- "result"}()select {//第一个case里阻塞的时间只有比第二个case阻塞的时间长的时候, 才能执行第二个casecase res := <-ch:fmt.Println(res)case <-time.After(time.Second * 1):fmt.Println("timeout")}
}我们使用channel来接收协程里的业务返回值。
select语句阻塞等待最先返回数据的channel,当先接收到time.After的通道数据时,select则会停止阻塞并执行该case的代码。此时就已经实现了对业务代码的超时处理。

转载于:https://www.cnblogs.com/nyist-xsk/p/11302743.html

Go 采用 time.After 实现超时控制相关推荐

  1. 微型三维图像传感器采用飞行时间技术

    微型三维图像传感器采用飞行时间技术 Tiny 3D image sensor uses time of flight technology 英飞凌科技股份公司(Infineon Technologie ...

  2. python基于值得内存_为什么说Python采用的是基于值的内存管理模式

    匿名用户 1级 2018-01-31 回答 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++, ...

  3. 计算机思维采用抽象和分解,凤凰机器人----什么是计算思维?凤凰机器人的编程课中是如何体现它的?...

    对于生活在科技和智能自动化时代的孩子们来说,理解计算机的思维方式,运用计算思维去解决生活中的问题,被认为和听.说.读.写.算一样,是每个人必备的思维能力.然而,到底什么才是计算思维呢? 计算思维是一种 ...

  4. python采用解释方式执行_Python初学(一)

    <本系列性文章是根据一篇python教程来写的,如有侵权请联系管理员删除文章> 在学习Python之前要先知道什么是程序设计语言,也就是程序设计语言的概述是什么? 程序设计语言的概述: 程 ...

  5. python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等)

    python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等) 1. 效果图 2. 原理 2.1 依赖模块及安装 2.2 工程目录 2.3 依赖文件latlng.txt 经纬度 3 源码 ...

  6. ml不是内部或外部命令_美国飞机制造商波音公司采用VR技术训练宇航员 ; Snap Lens Studio推出支持自定义ML驱动的Snapchat镜头...

    看日报是个好习惯!  Valve宣布为Steam开发者推出OpenXR预览版本,支持跨平台VR/AR内容开发  Valve在为Steam游戏开发人员迎接OpenXR面世的准备方面迈出了重要的一步,开发 ...

  7. Go 分布式学习利器(20)-- Go并发编程之多路选择和超时控制,channel的关闭和广播

    Select 多路选择 基本使用语法如下: select {case ret := <-retCh1: //阻塞事件,等待channel1的消息t.Logf("result %s \n ...

  8. 大型网站采用什么系统架构保证性能稳定性

    from http://www.bobd.cn/design/web/Theory/200904/31145.html 千万级的注册用户,千万级的帖子,nTB级的附件,还有巨大的日访问量,大型网站采用 ...

  9. python程序采用unicode编码、英文字符,Python 与 Unicode

    unicode 与 utf8 的关系 unicode 定义了统一的字符集, UTF8 则是一种编码 unicode 字符集的方式. 在 python2 中, str 类型, unicode 类型都是  ...

最新文章

  1. 实施Service Mesh前,你需要考虑这几个问题
  2. 谷歌论文:使用深度强化学习的芯片布局
  3. Bing API 2的体验
  4. Python3安装(Windows)
  5. canvas 绘制圆形进度条
  6. 研究员详述巴基斯坦黑客如何攻击印度和阿富汗政府
  7. requests-get请求
  8. memset 函数使用
  9. github项目提交失败 master - master (non-fast-forward)
  10. 【VC++类型转换】CString类型到Char[]类型的转换
  11. html打字练习测试代码,JS实现简单打字测试
  12. 编程语言选型之技法融合,与领域融合的那些套路
  13. win10系统无线服务器出错,win10系统中Wi-Fi证书错误的解决方法
  14. 通达信sar源码和分时均价线(结算价)源码
  15. cad图形不见了怎么办_画好的cad图纸文件不见了怎么找回?
  16. 《阿里云的这群疯子》
  17. Vue 项目实战五 参数管理 商品列表
  18. 6个实用的红米手机技巧
  19. Java判断单链表是否有环的两种实现方法
  20. 三星a9 刷 android 8,三星手机明年升级安卓8.0 新增功能曝光

热门文章

  1. 良好编程习惯的重要性
  2. Excel 计算时间差
  3. windows7下取消PDF格式文件图标的缩略图预览
  4. 软件本地化,软件本地化公司
  5. v$sysstat表解释
  6. Fedora 31安装RPMFusion源的方法
  7. ubuntu中PyCharm的安装与卸载
  8. php面向对象分页,PHP基于面向对象封装的分页类示例
  9. 023_html引用和术语定义标签
  10. 030_html脚本