首页 > 其他 > 详细

浅谈Go中的time.After

时间:2019-07-23 17:21:05      阅读:97      评论:0      收藏:0      [点我收藏+]

go的一条哲学是

不要通过共享来实现通信,而是通信来实现共享

多协程之间通过 channel 来实现通信,而普遍会遇到的问题是,如何进行超时控制,资料一查询,需要配置selecttime.After一起使用,一开始我以为是整体的超时时间,后面经过下面的这番时间,发现并不是


func main(){
    c := make(chan int)
    fmt.Println(time.Now())
    go func(){
        time.Sleep(500*time.Millsecond)
        c <- 0
        time.Sleep(500*time.Millsecond)
        c <- 1
    }()
    
    for {
        select {
        case p := <- c:
            fmt.Printf("p=%d\n",c)
        case <-time.After(1*time.Second):
            fmt.Println(time.Now())
            fmt.Printf("timeout")
            return
        }
    }
}

执行的结果是
技术分享图片

设置的超时时间是1s,而timeout的时间点是开始执行的2s后

其实这代表每次从通道中获取数据的超时时间,如果又有新的数据输入,那么时间会重新计时

浅谈Go中的time.After

原文:https://www.cnblogs.com/westlin/p/11232766.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!