专栏首页Golang语言社区Go语言如何并发超时处理详解

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)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-05-17

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

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

    李海彬
  • 转-Go语言开发常见陷阱,你遇到过几个?

    Go作为一种简便灵巧的语言,深受开发者的喜爱。但对于初学者来说,要想轻松驾驭它,还得做好细节学习工作。 初学者应该注意的地方: 大括号不能独立成行。 未使用变量...

    李海彬
  • Golang语言社区-Go语言递归

    递归是以相似的方式重复项目的过程。同样适用于编程语言中,如果一个程序可以让你调用同一个函数被调用的函数,递归调用函数内使用如下。 func recursion(...

    李海彬
  • Go语言如何并发超时处理详解

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

    李海彬
  • uWSGI listen queue 队列溢出的问题

    如果没有设置uwsgi的--listen,如果sysctl -a | grep net.core.somaxconn发现net.core.somaxconn=1...

    用户1214487
  • 微服务架构下的结算系统设计

    公司业务系统的账户资金对接了第三方存管业务,第三方存管指的是银行与证券公司根据相关的法律法规,为投资者提供的客户交易结算资金管理服务。根据银行要求,在每个交易日...

    会跳舞的机器人
  • 分析一个用于传播Hancitor恶意软件的Word文档(第一部分)

    最近,TechHelpList将一个用于传播Hancitor恶意软件的Word文档上传到了VirusBay,并概述了与之相关的站点、C2服务器以及由该文档所释放...

    FB客服
  • 全套灵云语音交互SDK,为你铺平“智能家居”之路

    捷通华声通过为企业推出更为贴心的全套灵云语音交互解决方案,以及为开发者提供的灵云麦克风阵列SDK、灵云麦克风阵列开发板、灵云种子SDK、灵云语音识别SDK、语音...

    BestSDK
  • 【Flutter 专题】30 图解自定义底部状态栏 ACEBottomNavigationBar (一)

    和尚刚接触 Flutter 时接触到底部状态栏 BottomNavigationBar 方便快捷,但随着使用过程发现依然有一些限制,包括图片选择/样...

    阿策
  • 开发高质量的软件要付出什么样的代价?

    在软件开发项目中,常见的争论之一是花费时间来提高软件质量,还是集中精力发布更有价值的功能。通常来说,交付功能的压力占据了主导地位,许多开发人员因此抱怨他们没有时...

    Java帮帮

扫码关注云+社区

领取腾讯云代金券