让我们以 GoTour 中的这个示例为例,因为它说明了我仅在有事件时才处理 SDL 事件的问题。
package main
import (
"fmt"
"time"
)
func main() {
tick := time.Tick(1e8)
boom := time.After(5e8)
for {
select {
case <-tick:
fmt.Println("tick.")
case <-boom:
fmt.Println("BOOM!")
return
default:
fmt.Println(" .")
time.Sleep(5e7)
}
}
}
这行得通。但是如果我不想在默认情况下打印或睡眠,而只想继续循环呢?我试过这个:
case <-boom:
fmt.Println("BOOM!")
return
default: // Nothing here.
}
}
}
但它会阻塞。
我在这里和那里看到过关于goroutines调度的一句话,但我没有理解它们。所以我想我有两个问题:
1)为什么会阻塞?
2)如何让它不做任何阻塞?