为什么我在尝试从一个从不在 goroutine 中接收数据但在 main func 中接收数据的通道中读取时不会出现死锁

Why do I not get a deadlock when trying to read from a channel that never receives data in a goroutine but do in the main func

为什么这里会出现死锁

c := make(chan bool)
fmt.Println(<-c)
fmt.Println("done")

这里没有

c := make(chan bool)
go func() {
    fmt.Println(<-c)
}()
fmt.Println("done")

我原以为这两种情况都会出现死锁,因为两者都试图从一个永远不会接收数据的通道中读取数据。

子goroutine被阻塞,但是当前goroutine可以继续执行。

只有当所有个goroutines同时被阻塞时才会出现死锁。