我惊慌失措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<-,即写操作,则确实会看到错误。有人可以解释我为什么吗?
1 回答
- 1 回答
- 0 关注
- 221 浏览
添加回答
举报
0/150
提交
取消