为什么这个函数不能退出?
Why this function can not exit?
我尝试运行主函数但是它无法结束。不知道为什么。
func main() {
tick := time.Tick(1 * time.Second)
done := make(chan bool)
go func() {
for {
select {
case <-tick:
println("-------hah---------")
case <-time.After(2 * time.Second):
println("after 1 second.")
done <- true
}
}
}()
<-done
}
我希望函数可以成功退出,但是函数无法结束
您的 select 语句有两个选项:
case <-tick:
每 1 秒触发一次,
case <-time.After(2 * time.Second):
开始 select 循环后 2 秒触发。
由于您的第一种情况总是在 1 秒后发生,因此第二种情况永远不会发生。只有第二种情况会触发退出主函数。
您可能想要的是:
tick := time.Tick(1 * time.Second)
timer := time.After(2 * time.Second)
和
case <-timer:
我尝试运行主函数但是它无法结束。不知道为什么。
func main() {
tick := time.Tick(1 * time.Second)
done := make(chan bool)
go func() {
for {
select {
case <-tick:
println("-------hah---------")
case <-time.After(2 * time.Second):
println("after 1 second.")
done <- true
}
}
}()
<-done
}
我希望函数可以成功退出,但是函数无法结束
您的 select 语句有两个选项:
case <-tick:
每 1 秒触发一次,
case <-time.After(2 * time.Second):
开始 select 循环后 2 秒触发。
由于您的第一种情况总是在 1 秒后发生,因此第二种情况永远不会发生。只有第二种情况会触发退出主函数。
您可能想要的是:
tick := time.Tick(1 * time.Second)
timer := time.After(2 * time.Second)
和
case <-timer: