我尝试运行main函数,但无法结束。我不知道为什么。
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
}
我希望功能可以成功退出,但功能不能结束
答案 0 :(得分:2)
您的select语句有两个选项:
case <-tick:
每1秒触发一次,并且
case <-time.After(2 * time.Second):
它会在选择循环开始2秒后触发。
由于您的第一种情况总是在1秒后发生,因此第二种情况将永远不会发生。而且只有第二种情况触发退出主功能。
您可能打算这样做的是:
tick := time.Tick(1 * time.Second)
timer := time.After(2 * time.Second)
和
case <-timer: