为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
绝地无双 2023-06-26 17:17:40
我尝试运行 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 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

您的 select 语句有两个选项:

        case <-tick:

每 1 秒触发一次,并且

        case <-time.After(2 * time.Second):

开始 select 循环后 2 秒触发。

由于第一种情况总是在 1 秒后发生,因此第二种情况永远不会发生。只有第二种情况才会触发退出main函数。

您可能想要的是这样的:

tick := time.Tick(1 * time.Second)
timer := time.After(2 * time.Second)

case <-timer:


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信