Kubernetes

分享到:

Kubernetes

从一个有缓冲的 channel 里读数据,当 channel 被关闭,依然能读出有效值。只有当返回的 ok 为 false 时,读出的数据才是无效的。

 1func 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}

运行结果:

1received:  18
2channel closed, data invalid.

先创建了一个有缓冲的 channel,向其发送一个元素,然后关闭此 channel。之后两次尝试从 channel 中读取数据,第一次仍然能正常读出值。第二次返回的 ok 为 false,说明 channel 已关闭,且通道里没有数据。

具体过程可以参考“从 channel 接收数据的过程是怎样的”一节。