3
package main
import "time"
func main() {
chan_never_used := make(chan int, 10)
c := make(chan int, 10)
for {
select {
case <-time.After(time.Second):
c <- 0
case c <- <-chan_never_used:
}
println(<-c)
}
}
https://play.golang.org/p/7hZMdITecg在<code>fatal error: all goroutines are asleep - deadlock!</code>上time.After结果僵局
选择上述结果的代码。
但是,如果我改变一个行:
package main
import "time"
func main() {
chan_never_used := make(chan int, 10)
c := make(chan int, 10)
for {
select {
case <-time.After(time.Second):
c <- 0
case n := <-chan_never_used: // This line changed
c <- n // Add this line
}
println(<-c)
}
}
它运作良好。
为什么第一个版本的代码会导致死锁,为什么这个改变会使代码工作?