This commit is contained in:
Xargin
2016-10-05 13:42:01 +08:00
parent 5fd1e1d48f
commit f2df739842
6 changed files with 19 additions and 19 deletions

View File

@@ -1,6 +1,6 @@
### 8.4.2. 串联的ChannelsPipeline
Channels也可以用于将多个goroutine接在一起一个Channels的输出作为下一个Channels的输入。这种串联的Channels就是所谓的管道pipeline。下面的程序用两个channels将三个goroutine串联起来如图8.1所示。
Channels也可以用于将多个goroutine接在一起一个Channel的输出作为下一个Channel的输入。这种串联的Channels就是所谓的管道pipeline。下面的程序用两个channels将三个goroutine串联起来如图8.1所示。
![](../images/ch8-01.png)
@@ -60,7 +60,7 @@ go func() {
}()
```
因为上面的语法是笨拙的,而且这种处理模式很场景因此Go语言的range循环可直接在channels上面迭代。使用range循环是上面处理模式的简洁语法它依次从channel接收数据当channel被关闭并且没有值可接收时跳出循环。
因为上面的语法是笨拙的,而且这种处理模式很常见因此Go语言的range循环可直接在channels上面迭代。使用range循环是上面处理模式的简洁语法它依次从channel接收数据当channel被关闭并且没有值可接收时跳出循环。
在下面的改进中我们的计数器goroutine只生成100个含数字的序列然后关闭naturals对应的channel这将导致计算平方数的squarer对应的goroutine可以正常终止循环并关闭squares对应的channel。在一个更复杂的程序中可以通过defer语句关闭对应的channel。最后主goroutine也可以正常终止循环并退出程序。