go time.After问题请教

gyn1132781055 2017-04-06 09:04:42

func main() {
go func() {
for {
select {
case <- time.After(time.Second):
fmt.Println("tick")
default:
fmt.Println("hello")
}
}

}()

time.Sleep(10 * time.Second)
}

请问这段代码执行后为什么只打印hello,每隔一秒tick没有输出呢?
...全文
1996 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanhuodemeili 2018-04-09
  • 打赏
  • 举报
回复
首先 After 和 tick要搞明白。 第二 default的存在 第三 time.After每次都是重新计时的(新的变量)
「已注销」 2018-03-05
  • 打赏
  • 举报
回复
因为有default存在。select里面所有的case节点都阻塞的话,会走到default.
haizideai000 2018-02-23
  • 打赏
  • 举报
回复
c := time.After(time.Second) for { select { case <-c: fmt.Println(`sss`) default: fmt.Println(`ssssss`) } } 你那块永远是一个临时量,怎么会执行呢。大兄弟
Cynhard85 2017-04-23
  • 打赏
  • 举报
回复
case <- time.After(time.Second): 这个case会在for的每次迭代判断一次,每次判断都先执行time.After(time.Second)这条语句,这条语句每次都返回一个新的信道,也就是说这个case每次都在等待接收新的信道的数据,永远不可能等到。 你的意图是等待旧的信道返回数据,应该把time.After(time.Second)拿到for循环之外,赋给一个变量比如ch := time.After(time.Second),然后在case里写 case <- ch
二进制加减法 2017-04-09
  • 打赏
  • 举报
回复
兄弟 你用错了 要用tick 而不是after

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧