range 和 close

发送者可以 close 一个通道,以表示不会再发送任何值。接收者可以通过接收表达式的第二个返回值来检测通道是否已关闭:执行

v, ok := <-ch

之后,如果已经没有值可以接收且通道已关闭, ok 就会是 false。

循环 for i := range c 会不断从通道接收值,直到通道关闭。

注意: 只有发送者应该关闭通道,接收者不应关闭。向已经关闭的通道发送值会引发 panic。

另一个注意事项: 通道与文件不同,通常不需要关闭。只有在必须告知接收者不会再有值到来时才需要关闭通道,例如为了终止 range 循环。

< 4/11 >