GO 通道的關閉

2022-08-31 01:27:31 字數 647 閱讀 7633

並不是往通道裡放多少次資料,就必須取多次少資料的(之前的例子都是放3次取3次,放10次取10次),我們可以做乙個操作,當子協程沒有新放入的時候,主協程不再去取,這就是關閉通道

package main

import

"fmt"//

channel並不像檔案那樣需要經常去關閉它,只有當你確實沒有任何傳送資料了,或者是你想顯示的結束range迴圈之類的,才去關閉channel

//關閉channel後,無法向channel再傳送資料(引發panic錯誤後導致接收立即返回零值)

//關閉channel後,可以繼續向channel接收資料

//對於nil channel,無論收發都會被阻塞

func main()

close(ch)

//關閉channel

}()

fortrue

else

}//上面的這段死迴圈也可以使用下面的實現,更簡便

for num := range ch
}

執行結果

num =  0

num = 1

num = 2

num = 3

num = 4

go 通道 go語言通道channel

通過使用通道,在多個goroutine傳送和接受共享的資料,達到資料同步的目的。通道,他有點像在兩個routine之間架設的管道,乙個goroutine可以往這個管道裡塞資料,另外乙個可以從這個管道裡取資料,有點類似於我們說的佇列。宣告乙個通道很簡單,我們使用chan關鍵字即可,除此之外,還要指定通...

Go從入門到精通 關閉通道後繼續使用通道

通道是乙個引用物件,和 map 類似。map 在沒有任何外部引用時 go 程式在執行 runtime 會自動對記憶體進行垃圾 garbage collection,gc 類似的,通道也可以被垃圾 但是通道也可以被主動關閉的。使用 close 來關閉乙個通道 close ch 關閉的通道依然可以被訪問...

Go 通道(chan)關閉和後續讀取操作

jobs make chan int,5 for i 1 i 4 i close jobs 2 讀取關閉的無快取通道 讀取關閉後的無快取通道,不管通道中是否有資料,返回值都為0和false。done make chan int gofunc close done for i 1 i 3 i 執行結果...