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