读写
- Channel 未关闭
-
Channel 未满
可写、可读
v, ok := <-ch
返回相应值与 true -
Channel 已满
仅可读
v, ok := <-ch
返回相应值与 true -
Channel 已空
仅可写
v, ok := <-ch
操作会阻塞,直到有数据可用。
-
- Channel 已关闭
-
Channel 未空
仅可读
v, ok := <-ch
返回相应值与 true -
Channel 已空
可读
v, ok := <-ch
返回零值与 false
-
遍历
遍历时,该 Channel 必须为关闭状态,否则会产生死锁:遍历一个未关闭的 channel 时,遍历操作会一直尝试从 channel 中读取数据。如果 channel 中没有数据且未关闭,range 操作会阻塞,等待新的数据写入。这种情况下,如果没有其他 goroutine 向 channel 写入数据,程序就会陷入死锁状态。