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

对阻塞通道感到困惑

对阻塞通道感到困惑

Go
胡说叔叔 2023-04-04 17:23:59
我有这段代码应该在程序退出前等待 10 秒,但它只有在我之后为它添加某种打印内容时才有效。这是为什么?我希望它等待 10 秒,而不必取消对该打印语句的注释。func main() {  forever := make(chan bool)  go func() {    fmt.Println("why")    time.Sleep(10*time.Second)    //fmt.Println("here")    forever <- false  }()  fmt.Println("forever")  <- forever}这也有效:func main() {  forever := make(chan bool)  go func() {    fmt.Println("why")    time.Sleep(10*time.Second)    forever <- false  }()  fmt.Println(<- forever)}以下程序在 Go playground 中运行时不会等待 10 秒:package mainimport (    "time")func main() {    forever := make(chan bool)    go func() {        time.Sleep(10 * time.Second)        forever <- false    }()    <-forever}
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

从技术上讲,它是游乐场的“特色”。当一切都被阻塞在操场上准时等待时,时间会人为地推进直到事情解除阻塞……或者它决定事情真的陷入僵局。



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

添加回答

举报

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