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被关闭,会跳出循环。

扫描二维码关注公众号,回复: 6942240 查看本文章

猜你喜欢

转载自www.cnblogs.com/lanyangsh/p/11296355.html
今日推荐