为什么这个函数无法退出呢?

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

}

我期望函数能够成功退出,但是函数无法结束


绝地无双
浏览 173回答 1
1回答

ABOUTYOU

您的 select 语句有两个选项:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;<-tick:每 1 秒触发一次,并且&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;<-time.After(2&nbsp;*&nbsp;time.Second):开始 select 循环后 2 秒触发。由于第一种情况总是在 1 秒后发生,因此第二种情况永远不会发生。只有第二种情况才会触发退出main函数。您可能想要的是这样的:tick&nbsp;:=&nbsp;time.Tick(1&nbsp;*&nbsp;time.Second) timer&nbsp;:=&nbsp;time.After(2&nbsp;*&nbsp;time.Second)和case&nbsp;<-timer:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go