为什么这个函数不能退出?

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: