我驚慌失措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會檢測到主例程在寫入時被阻塞,并且由于在寫入非緩沖通道時發(fā)生了阻塞,因此永遠不會到達讀取代碼段,并且我們會感到恐慌。為什么我們在下面的代碼中看不到問題,為什么不慌張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 回答
- 0 關(guān)注
- 251 瀏覽
添加回答
舉報
0/150
提交
取消