我正在学习频道,下面是我尝试过的测试,但发生了死锁
func main() {
ch := make(chan int)
go func() {
select {
case ch <- 1:
fmt.Println("send suc")
default: // if comment this line, it will run smoothly
fmt.Println("default")
}
}()
time.Sleep(2) // do some time consuming thing...
fmt.Printf("receive val: %d", <-ch)
}
我预计没有死锁,但结果是:
default
fatal error: all goroutines are asleep - deadlock!
但是如果我删除defaultor time.Sleep(2),代码将顺利运行,结果:
send suc
receive val: 1
有人可以解释为什么会发生死锁吗?
弑天下
相关分类