Golang?channel關(guān)閉后是否可以讀取剩余的數(shù)據(jù)詳解
golang channel關(guān)閉后,其中剩余的數(shù)據(jù),是可以繼續(xù)讀取的。
請(qǐng)看下面的測(cè)試?yán)印?/p>
創(chuàng)建一個(gè)帶有緩沖的channel,向channel中發(fā)送數(shù)據(jù),然后關(guān)閉channel,最后,從channel中讀取數(shù)據(jù),輸出結(jié)果。
package main import ( "fmt" ) func main(){ ch := make(chan int, 3) ch <-1 ch <-2 ch <-3 close(ch) for value := range ch { fmt.Println("value:", value) } }
output:
value: 1
value: 2
value: 3
可以看到,channel關(guān)閉之后,仍然可以從channel中讀取剩余的數(shù)據(jù),直到數(shù)據(jù)全部讀取完成。
多說(shuō)一點(diǎn),對(duì)于一個(gè)關(guān)閉的channel,如果繼續(xù)向channel發(fā)送數(shù)據(jù),會(huì)引起panic。
如果繼續(xù)讀數(shù)據(jù),得到的是零值(對(duì)于int,就是0)。
判斷一個(gè)channel的方式有兩種:
一種方式:
value, ok := <- ch
ok是false,就表示已經(jīng)關(guān)閉。
另一種方式,就是上面例子中使用的方式:
for value := range ch { }
如果channel被關(guān)閉,會(huì)跳出循環(huán)。
另外,如果channel被關(guān)閉后,不能再寫(xiě)入,寫(xiě)入會(huì)導(dǎo)致panic。但可以一直讀取,讀取到的值是類(lèi)型的零值:
for i:=0;i<10;i++ { value := <- ch fmt.Println("value:", value) }
value: 1
value: 2
value: 3
value: 0
value: 0
value: 0
value: 0
value: 0
value: 0
value: 0
到此這篇關(guān)于Golang channel關(guān)閉后是否可以讀取剩余的數(shù)據(jù)詳解的文章就介紹到這了,更多相關(guān)Golang channel關(guān)閉內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
重學(xué)Go語(yǔ)言之?dāng)?shù)組的具體使用詳解
Go的數(shù)組是一種復(fù)合數(shù)據(jù)類(lèi)型,在平時(shí)開(kāi)發(fā)中并不常用,更常用的是切片(slice),可以把切片看作是能動(dòng)態(tài)擴(kuò)容的數(shù)組,切片的底層數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,所以數(shù)組雖不常用,但仍然有必要掌握2023-02-02golang中snappy的使用場(chǎng)合實(shí)例詳解
在java 和go語(yǔ)言 大字符傳達(dá)的時(shí)候, 采用snappy 壓縮 解壓縮是最好的方案。下面這篇文章主要給大家介紹了關(guān)于golang中snappy使用場(chǎng)合的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12golang 如何獲取pem格式RSA公私鑰長(zhǎng)度
這篇文章主要介紹了golang 如何獲取pem格式RSA公私鑰長(zhǎng)度操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12Golang實(shí)現(xiàn)讀取excel文件并轉(zhuǎn)換為JSON格式
本文介紹了如何使用Golang讀取Excel文件并將其轉(zhuǎn)換為JSON格式,通過(guò)安裝excelize依賴(lài)和創(chuàng)建readExcelToJSON方法,可以實(shí)現(xiàn)這一功能,如果需要轉(zhuǎn)換數(shù)據(jù)類(lèi)型,可以修改相應(yīng)的代碼,需要的朋友可以參考下2025-03-03Golang實(shí)現(xiàn)web文件共享服務(wù)的示例代碼
這篇文章主要介紹了Golang實(shí)現(xiàn)web文件共享服務(wù)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10Golang設(shè)計(jì)模式之責(zé)任鏈模式講解和代碼示例
責(zé)任鏈?zhǔn)且环N行為設(shè)計(jì)模式, 允許你將請(qǐng)求沿著處理者鏈進(jìn)行發(fā)送, 直至其中一個(gè)處理者對(duì)其進(jìn)行處理,本文就詳細(xì)給大家介紹一下Golang 責(zé)任鏈模式,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-06-06Go語(yǔ)言常見(jiàn)數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)詳解
這篇文章主要為大家學(xué)習(xí)介紹了Go語(yǔ)言中的常見(jiàn)數(shù)據(jù)結(jié)構(gòu)(channal、slice和map)的實(shí)現(xiàn),文中的示例代碼簡(jiǎn)潔易懂,需要的可以參考一下2023-07-07