发送者可以 close 一个通道,以表示不会再发送任何值。接收者可以通过接收表达式的第二个返回值来检测通道是否已关闭:执行
close
v, ok := <-ch
之后,如果已经没有值可以接收且通道已关闭, ok 就会是 false。
ok
false
循环 for i := range c 会不断从通道接收值,直到通道关闭。
for i := range c
注意: 只有发送者应该关闭通道,接收者不应关闭。向已经关闭的通道发送值会引发 panic。
另一个注意事项: 通道与文件不同,通常不需要关闭。只有在必须告知接收者不会再有值到来时才需要关闭通道,例如为了终止 range 循环。
range