我不清楚為什么如果我刪除in ,則 in 中的 print 語句func a1將不會打印任何內容。我認為在我們將某些內容發送到結果之前,應該執行打印語句,并且不應對此產生任何影響。<-resultfunc a2<-resultfunc a2(){ x := 3 result := make(chan int, 10) input := make(chan int, 10) go a1(x, input, result) input <- 4 <-result}func a1(x int, input <-chan int, result chan<- int){ y := <-input fmt.Println("hello", y) result <- x}但是,然后我嘗試了以下代碼:hello無論我<-result是否有,它都會打印。func a2(){ x := 3 result := make(chan int, 10) go a1(x, result) <-result}func a1(x int, result chan<- int){ fmt.Println("hello") result <- x}能否詳細解釋一下,以便初學者能夠理解?看起來input <-chan int這個輸入通道正在做一些導致差異的事情。
1 回答

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
因為如果沒有 <-result,a2() 返回并且程序終止,假設 a2() 是 main() 唯一做的事情??赡?a1() 甚至永遠不會醒來,因為輸入通道已緩沖,并且寫入不會阻塞。如果將其設置為無緩沖,則 a1() 將在 a2() 返回之前喚醒,但這仍然不能保證 println 能夠運行。
使用 <-result,a2() 等待 a1() 從結果通道讀取,該通道位于 println 之后。這是確保 println 運行的唯一最安全的方法。
- 1 回答
- 0 關注
- 143 瀏覽
添加回答
舉報
0/150
提交
取消