go 從已關閉的channel讀取資料

2021-10-08 18:15:57 字數 1774 閱讀 5880

剛接觸go的channel,我在思考乙個問題,chan是傳送方關閉,還是接收方關閉,如果是傳送方關閉,傳送方發完資料,就關閉chan,那可能接收方還沒接收完資料,讀取關閉的通道會怎樣?

可以看到從已經關閉的chan是讀取資料是沒有問題的,但讀取完chan的資料後再讀取會返回false和預設值0這樣又產生乙個新問題,接收方如何判斷chan已經關閉了呢?

判斷返回的是true還是false就可以知道,返回false代表已經關閉

結果和有緩衝一樣

重複關閉chan會panic

package main

import

("fmt"

"sync"

)func

main()

wg.add(1)

gofunc()

close

(ch)

ch 5 fmt.

println

("chan close"

) wg.

done()

}() wg.

wait()

fmt.

println

("stop"

)}

Go語言裡channel的死鎖

最近看了下go語言並寫了些示例 在用到channel的時候報了個奇怪的錯誤然後退出 fatal error all goroutines are asleep deadlock 在stackoverflow上搜到 查了查,出錯的 如下 func chanfunc c chan int,d chan ...

Go語言的管道Channel用法

channel 是有型別的管道,可以用 channel 操作符 ch v 箭頭 就是資料流的方向。和 map 與 slice 一樣,channel 使用前必須建立 ch make chan int 預設情況下,在另一端準備好之前,傳送和接收都會阻塞。這使得 goroutine 可以在沒有明確的鎖或競...

Go 通道(channel)的基本操作

通道型別是go語言自帶的 唯一乙個可以滿足併發安全性的型別,在宣告並初始化乙個通道時,需要用到內建函式make,傳給make函式的第乙個引數應該代表通道的具體型別的型別字面量。如型別字面量 chan int,其中chan表示通道型別的關鍵字,而int說明了該通道型別的元素型別。在初始化通道時,mak...