Просмотр исходного кода

修正14.3中关于检测通道阻塞的错误 (#808)

crazy_fz 4 лет назад
Родитель
Сommit
e719589582
1 измененных файлов с 16 добавлено и 1 удалено
  1. 16 1
      eBook/14.3.md

+ 16 - 1
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) 节)。