golang channel关闭后,其中剩余的数据,是可以继续读取的。
请看下面的测试例子。
创建一个带有缓冲的channel,向channel中发送数据,然后关闭channel,最后,从channel中读取数据,输出结果。
1 | package main |
output:
1 | value: 1 |
可以看到,channel关闭之后,仍然可以从channel中读取剩余的数据,直到数据全部读取完成。
多说一点,对于一个关闭的channel,如果继续向channel发送数据,会引起panic。
如果继续读数据,得到的是零值(对于int,就是0)。
判断一个channel的方式有两种:
一种方式:
1 | value, ok := <- ch |
ok是false,就表示已经关闭。
另一种方式,就是上面例子中使用的方式:
1 | for value := range ch { |
如果channel被关闭,会跳出循环。