为什么这个功能不能退出?

时间:2019-06-25 12:42:21

标签: go goroutine

我尝试运行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
}

我希望功能可以成功退出,但功能不能结束

1 个答案:

答案 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: