理解 Go 中的通道輸出順序
給定的 Go 程式碼片段涉及使用無緩衝通道在 goroutine 之間進行通訊。雖然由於阻塞行為,程式碼預計先列印“hello”,然後列印“ping”,但它始終會列印“ping”,然後列印“hello”。這引發了有關訊息寫入通道和從通道讀取訊息的順序的問題。
如程式碼所示,無緩衝通道會阻塞傳送者和接收者,直到資料可用。這意味著當 go 例程嘗試寫入通道時,它們將阻塞,直到訊息被讀取。
執行後,程式碼會分叉兩個 go 例程,嘗試向通道寫入「hello」和「ping」頻道。由於沒有立即可用的接收器,因此兩個例程都會阻塞。
當第一次讀取操作(msg :=
因此,列印訊息的順序是由goroutine執行的順序決定的,這是不確定的。透過在寫入通道的 goroutine 中加入 print 語句,可以驗證寫入的順序是否與從通道讀取訊息的順序相對應。
以上是為什麼我的 Go 無緩衝通道以意外的順序列印訊息?的詳細內容。更多資訊請關注PHP中文網其他相關文章!