關于頻道的Go 教程頁面似乎缺少一個詞或只是沒有被編輯。我不知道關于通過渠道發送和接收應該說些什么。默認情況下,發送和接收阻塞,直到另一方準備就緒。blockGo 中有什么東西嗎?我以前沒見過。block被用作名詞嗎?我試著尋找澄清。唯一具有類似措辭的其他頁面是educative.io此外,默認情況下,通道發送和接收直到另一方準備好但這沒有意義。他們的意思是:通道發送和接收不管對方是否準備好?這不覺得很浪費嗎?或者上面的陳述中是否缺少“不要”?
1 回答

慕無忌1623718
TA貢獻1744條經驗 獲得超4個贊
“阻塞”意味著 goroutine 將等待。你可以這樣寫:
默認情況下,發送和接收等到對方準備好。
“塊”只是對此的正常術語。它不特定于 Go。可以以非阻塞方式在 Go 中使用通道:
您可以創建帶緩沖區的通道。只要緩沖區中有空間,寫入就是非阻塞的(但如果緩沖區已滿,它將阻塞)。只要緩沖區中有數據,讀取就是非阻塞的(但如果緩沖區為空,它將阻塞)。
您可以使用
select
帶有default
分支的語句。
var readch chan int
var writech chan int
var value int
select {
case n := <- readch:
// Received data.
case writech <- value:
// Sent data.
default:
// Didn't send or receive data.
}
在這段代碼中,goroutine 將轉到default分支,而不是阻塞(等待)。
- 1 回答
- 0 關注
- 115 瀏覽
添加回答
舉報
0/150
提交
取消