golang channel關閉后,是否可以讀取剩余的數據


golang channel關閉后,其中剩余的數據,是可以繼續讀取的。

請看下面的測試例子。

創建一個帶有緩沖的channel,向channel中發送數據,然后關閉channel,最后,從channel中讀取數據,輸出結果。

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關閉之后,仍然可以從channel中讀取剩余的數據,直到數據全部讀取完成。

多說一點,對於一個關閉的channel,如果繼續向channel發送數據,會引起panic。

如果繼續讀數據,得到的是零值(對於int,就是0)。

判斷一個channel的方式有兩種:
一種方式:

value, ok := <- ch

ok是false,就表示已經關閉。

另一種方式,就是上面例子中使用的方式:

for value := range ch {
    
}

如果channel被關閉,會跳出循環。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM