我惊慌失措
func main() {
ch := make(chan int)
ch <- 1
fmt.Println(<-ch)
}
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.main()
/tmp/sandbox058504389/main.go:10 +0x60
我相信,go会检测到主例程在写入时被阻塞,并且由于在写入非缓冲通道时发生了阻塞,因此永远不会到达读取代码段,并且我们会感到恐慌。为什么我们在下面的代码中看不到问题,为什么不慌张
func main() {
fmt.Println("Hello, playground")
var wg sync.WaitGroup
ch := make(chan int)
wg.Add(1)
go func() {
<-ch
wg.Done()
}()
wg.Wait()
}
鉴于在工作片段中,如果我将<-ch通道read更改为ch<-,即写操作,则确实会看到错误。有人可以解释我为什么吗?
相关分类