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

 更新时间:2016年09月13日 14:27:38   投稿:daisy  
大家都知道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 中判断两个结构体相等的方法

    Golang 中判断两个结构体相等的方法

    这篇文章主要介绍了Golang 中如何判断两个结构体相等,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • 深入了解Golang中reflect反射基本原理

    深入了解Golang中reflect反射基本原理

    反射是这样一种机制,它是可以让我们在程序运行时(runtime)访问、检测和修改对象本身状态或行为的一种能力。本文主要带大家来看看Golang中reflect反射基本原理,需要的可以参考一下
    2023-01-01
  • Kubernetes上使用Jaeger分布式追踪基础设施详解

    Kubernetes上使用Jaeger分布式追踪基础设施详解

    这篇文章主要为大家介绍了Kubernetes上使用Jaeger分布式追踪基础设施详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • golang限流库两个大bug(半年之久无人提起)

    golang限流库两个大bug(半年之久无人提起)

    最近我的同事在使用uber-go/ratelimit[1]这个限流库的时候,遇到了两个大 bug,这两个 bug 都是在这个库的最新版本(v0.3.0)中存在的,而这个版本从 7 月初发布都已经过半年了,都没人提 bug,难道大家都没遇到过么
    2023-12-12
  • Go语言Mock使用基本指南详解

    Go语言Mock使用基本指南详解

    这篇文章主要介绍了Go语言Mock使用基本指南详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Golang交叉编译(跨平台编译)的使用

    Golang交叉编译(跨平台编译)的使用

    本文主要介绍了Golang交叉编译(跨平台编译)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • go module构建项目的实现

    go module构建项目的实现

    本文主要介绍了go module构建项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • GoLang中Strconv库有哪些常用方法

    GoLang中Strconv库有哪些常用方法

    这篇文章主要介绍了GoLang中Strconv库有哪些常用方法,strconv库实现了基本数据类型与其字符串表示的转换,主要有以下常用函数: Atoi()、Itia()、parse系列、format系列、append系列
    2023-01-01
  • 如何使用Golang打包jar应用

    如何使用Golang打包jar应用

    go:embed 是 Go 1.16 引入的一个强大功能,它允许在编译时将外部文件或目录嵌入到 Go 程序中,下面介绍如何使用 go:embed 来嵌入JAR 文件,感兴趣的朋友一起看看吧
    2025-04-04
  • Go语言Web编程实现Get和Post请求发送与解析的方法详解

    Go语言Web编程实现Get和Post请求发送与解析的方法详解

    这篇文章主要介绍了Go语言Web编程实现Get和Post请求发送与解析的方法,结合实例形式分析了Go语言客户端、服务器端结合实现web数据get、post发送与接收数据的相关操作技巧,需要的朋友可以参考下
    2017-06-06

最新评论