Go语言如何并发超时处理详解

大家都知道golang并没有在语言层次上提供超时操作,但可以通过一些小技巧实现超时。下面来一起看看吧,有需要的朋友们可以参考借鉴。

实现原理:

并发一个函数,等待1s后向timeout写入数据,在select中如果1s之内有数据向其他channel写入则会顺利执行,如果没有,这是timeout写入了数据,则我们知道超时了。

实现代码:

package main 
import "fmt"
import "time"
func main() {
 ch := make(chan int, 1)
 timeout := make(chan bool, 1)
 // 并发执行一个函数,等待1s后向timeout写入true
 go func() {
 time.Sleep(1000)
 timeout <- true
 }()
 // 这里会等待ch或timeout读出数据
 // 因为一直没有向ch写入数据
 // 在1s后向timeout写入了数据
 // 所以执行了timeout的case
 // 利用这个技巧可以实现超时操作
 select {
 case <- ch :
 fmt.Println("read from ch")
 case <- timeout :
 fmt.Println("time out...")
 }
}

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-04-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏静下来

增加wordpress可以上传.torrent文件

今天想上传个文件,是.torrent后缀的。。就是种子,为什么要上传,咱就不说了。。。wordpress本身是不支持上传.torrent文件的,不过我们可以用代...

36550
来自专栏张伟博客

如何使用 Git 和 GitHub 来管理自己的代码

    点击右上角加号箭头,在弹出的菜单中选择 "New repository" 选项进行仓库配置。

15720
来自专栏cnblogs

Chrome调试技巧

23730
来自专栏WindCoder

windows下python中pip与easy_install相关

下载地址:https://pypi.python.org/pypi/ez_setup

12110
来自专栏性能与架构

智能图片压缩-腾讯智图

智图是腾讯前端团队开发的一个专门用于图片压缩和图片格式转换的平台 可以对png,jpeg,gif等各类格式图片的压缩,以及为上传图片自动选择最优的图片格式,同时...

7.9K90
来自专栏小狼的世界

phpExcel导出文件时内存溢出的问题

在使用PHPExcel导出文件时,经常会因为文件过大导致PHP内存溢出报错,为了解决这个问题,可以使用PHPExcel提供的参数进行优化。这里说的Excel文件...

26830
来自专栏云加头条

腾讯云存储最佳实践系列一:使用对象存储COS托管静态网站

在此实践中,用户可以在腾讯云对象存储(以下简称 COS)上托管静态网站,访客可以通过自定义域名(例如 www.example.com )访问托管的静态网站。无论...

96900
来自专栏拂晓风起

JS 拦截/捕捉 全局错误 全局Error onerror

26940
来自专栏腾讯云服务器团队的专栏

在 CentOS7.2 下 DIY 动手搭建一个 WordPress

在 CentOS7.2 下 DIY 动手搭建一个 WordPress。在命令行下手动搭建一个 WordPress 博客。用于开始进入云服务器的第一步。

1.5K30
来自专栏iOS122-移动混合开发研究院

【最新】LuaJIT 32/64 位字节码,从编译到使用全纪录

网上关于 LuaJIT 的讨论,已经显得有些陈旧。如果你对 LuaJIT 编译 Lua 源文件为具体的 32位或64位字节码,极其具体使用感兴趣的话,不妨快速读...

30800

扫码关注云+社区

领取腾讯云代金券