博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈Go中的time.After
阅读量:5349 次
发布时间:2019-06-15

本文共 689 字,大约阅读时间需要 2 分钟。

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        }    }}

执行的结果是

1024671-20190723164455522-2024246990.png

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

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

转载于:https://www.cnblogs.com/westlin/p/11232766.html

你可能感兴趣的文章
CocoaPods Mac App的安装和使用
查看>>
python 正则表达式匹配ip
查看>>
Flask实战-留言板-使用Faker生成虚拟数据 --
查看>>
解决VC++6.0 无法打开、无法添加工程文件
查看>>
ORA-01858: a non-numeric character was found where a numeric was expected
查看>>
Structure From Motion(二维运动图像中的三维重建)
查看>>
25复杂链表的复制
查看>>
2 Orchard汉化资源包的使用
查看>>
python3 property
查看>>
自定义控件注意点
查看>>
SSRS 报表 如何匿名查看
查看>>
JVM内存管理机制
查看>>
centos 安装Mysql
查看>>
简单通用Ajax函数
查看>>
【Android】ListView监听上下滑动(判断是否显示返回顶部按钮
查看>>
HBASE的MAPREDUCE任务运行异常解决办法,无需CYGWIN,纯WINDOWS环境
查看>>
禅道在docker上部署与迁移
查看>>
关于继承、封装、多态、抽象和接口
查看>>
c27---typedef
查看>>
android WebViewClient和WebChromeClient
查看>>