diff --git a/eBook/14.3.md b/eBook/14.3.md index e3fc59e..884f0e7 100644 --- a/eBook/14.3.md +++ b/eBook/14.3.md @@ -27,7 +27,7 @@ if v, ok := <-ch; ok { } ``` -或者在 for 循环中接收的时候,当关闭或者阻塞的时候使用 break: +或者在 for 循环中接收的时候,当关闭的时候使用 break: ```go v, ok := <-ch @@ -37,6 +37,21 @@ if !ok { process(v) ``` +而检测通道当前是否阻塞,需要使用 select(参见第 [14.4](14.4.md) 节)。 + +```go +select { +case v, ok := <-ch: + if ok { + process(v) + } else { + fmt.Println("The channel is closed") + } +default: + fmt.Println("The channel is blocked") +} +``` + 在示例程序 14.2 中使用这些可以改进为版本 goroutine3.go,输出相同。 实现非阻塞通道的读取,需要使用 select(参见第 [14.4](14.4.md) 节)。