Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Golang channel关闭

Golang channel关闭后是否可以读取剩余的数据详解

作者:翔云123456

这篇文章主要介绍了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被关闭,会跳出循环。

另外,如果channel被关闭后,不能再写入,写入会导致panic。但可以一直读取,读取到的值是类型的零值:

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

到此这篇关于Golang channel关闭后是否可以读取剩余的数据详解的文章就介绍到这了,更多相关Golang channel关闭内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文