我有这段代码应该在程序退出之前等待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操场上运行时不会等待10秒钟:
package main
import (
"time"
)
func main() {
forever := make(chan bool)
go func() {
time.Sleep(10 * time.Second)
forever <- false
}()
<-forever
}
答案 0 :(得分:5)
从技术上讲,这是游乐场的“特色”。当一切都被阻塞在操场上准时等待时,时间会人为地增加,直到事物解开……或者它决定事物真的陷入僵局。请参见Golang Playground article中的“浮空时间”部分。