golang 使用select完成超時
阿新 • • 發佈:2019-01-08
timeout := make(chan bool, 1) go func() { time.Sleep(1e9) timeout <- true } () select { case <- ch: //從ch中讀取資料 case <-timeout: //ch一直沒有資料寫入,超時觸發timeout } --------------------- 作者:緋淺yousa 來源:CSDN 原文:https://blog.csdn.net/qq_15437667/article/details/52961671 版權宣告:本文為博主原創文章,轉載請附上博文連結!
func main() { var a chan string a =make(chan string) go sendDataTo(a) go timing() getAchan(10*time.Second,a) } func sendDataTo(a chan string) { for { a <- "我是a通道的資料" time.Sleep(1e9 *3) } } //在一定時間內接收不到a的資料則超時 func getAchan(timeout time.Duration, a chan string) { var after <-chan time.Time loop: after = time.After(timeout) for{ fmt.Println("等待a中的資料,10秒後沒有資料則超時") select { case x :=<- a: fmt.Println(x) goto loop case <-after: fmt.Println("timeout.") return } } } func timing() { //定時器,10秒鐘執行一次 ticker := time.NewTicker(10 * time.Second) for { time := <-ticker.C fmt.Println("定時器====>",time.String()) } } --------------------- 作者:誠寜 來源:CSDN 原文:https://blog.csdn.net/mofiu/article/details/77318173 版權宣告:本文為博主原創文章,轉載請附上博文連結!