从一个关闭的通道里仍然能读出数据吗
从一个有缓冲的 channel 里读数据。,当 channel 被关闭,依然能读出有效值,只有当返回的 ok 为 false 时,读出的数据才是无效的。
来看一个例子:
func main() {
ch := make(chan int, 5)
ch <- 18
close(ch)
x, ok := <-ch
if ok {
fmt.Println("received: ", x)
}
x, ok = <-ch
if !ok {
fmt.Println("channel closed, data invalid.")
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
运行结果:
received: 18
channel closed, data invalid.
1
2
2
先创建一个有缓冲的 channel, 向其发送一个元素, 然后关闭此 channel。 之后两次尝试从 channel 中读取数据,第一次仍然能正常读出值;第二次返回的 ok 为 false,说明 channel 已关闭,且通道里没有数据。
上次更新: 5/9/2023, 10:58:32 AM