06 - 从一个关闭的 channel 仍然能读出数据吗
从一个有缓冲的 channel 里读数据,当 channel 被关闭,依然能读出有效值。只有当返回的 ok 为 false 时,读出的数据才是无效的。
1
func main() {
2
ch := make(chan int, 5)
3
ch <- 18
4
close(ch)
5
x, ok := <-ch
6
if ok {
7
fmt.Println("received: ", x)
8
}
9
10
x, ok = <-ch
11
if !ok {
12
fmt.Println("channel closed, data invalid.")
13
}
14
}
Copied!
运行结果:
1
received: 18
2
channel closed, data invalid.
Copied!
先创建了一个有缓冲的 channel,向其发送一个元素,然后关闭此 channel。之后两次尝试从 channel 中读取数据,第一次仍然能正常读出值。第二次返回的 ok 为 false,说明 channel 已关闭,且通道里没有数据。
具体过程可以参考“从 channel 接收数据的过程是怎样的”一节。
Copy link