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

时间:2022-05-06
本文章向大家介绍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...")

}

}