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++
執行結果:
1:0 false
2:0 false
3:0 false
3、讀取關閉的有快取通道:
讀取關閉後的有快取通道,將快取資料讀取完後,再讀取返回值為0和false。
done := make(chan
int,1)
gofunc() ()
close(done)
for i :=1; i <=3; i++
執行結果:
1:1 true
2:0 false
3:0 false
4、range遍歷通道:
通道寫完後,必須關閉通道,否則range遍歷會出現死鎖。
GO 通道的關閉
並不是往通道裡放多少次資料,就必須取多次少資料的 之前的例子都是放3次取3次,放10次取10次 我們可以做乙個操作,當子協程沒有新放入的時候,主協程不再去取,這就是關閉通道 package main import fmt channel並不像檔案那樣需要經常去關閉它,只有當你確實沒有任何傳送資料了,...
go基礎之Goroutines和Channels
在go語言中,每乙個併發的執行單元叫作乙個goroutine。當乙個程式啟動時,其主函式即在乙個單獨的goroutine中執行,我們叫它main goroutine。新 的goroutine會用go語句來建立。在語法上,go語句是乙個普通的函式或方法呼叫前加上關鍵 字go。go語句會使其語句中的函式...
Go從入門到精通 關閉通道後繼續使用通道
通道是乙個引用物件,和 map 類似。map 在沒有任何外部引用時 go 程式在執行 runtime 會自動對記憶體進行垃圾 garbage collection,gc 類似的,通道也可以被垃圾 但是通道也可以被主動關閉的。使用 close 來關閉乙個通道 close ch 關閉的通道依然可以被訪問...