go routine

无缓冲 channel 是在多个 goroutine 之间同步很棒的工具。

当在 Go 中用 ch := make ( chan bool ) 创建 chennel 时,bool 型的 无缓冲 channel 会
被创建。这对于程序来说意味着什么呢?首先,如果读取( value := <− ch )它将会
被阻塞,直到有数据接收。其次,任何发送( ch <− 5 )将会被阻塞,直到数据被读出。
无缓冲 channel 是在多个 goroutine 之间同步很棒的工具。
不过 Go 也允许指定 channel 的缓冲大小,很简单,就是 channel 可以存储多少元素。
ch := make ( chan bool , 4) ,创建了可以存储 4 个元素的 bool 型 channel。在这个
channel 中,前 4 个元素可以无阻塞的写入。当写入第 5 ? 元素时,代码 将会 阻塞,直
到其他 goroutine 从 channel 中读取一些元素,腾出空间。
一句话说,在 Go 中下面的为 true:
ch := make ( chan type , value)
{
value == 0 → 无缓冲
value > 0 → 缓冲 value 的元素

}

关闭 channel
当 channel 被关闭后,读取端需要知道这个事情。下面的代码演示了如何检查 channel
是否被关系。
x, ok = <− ch
当 ok 被赋值为 true 意味着 channel 尚未被关闭, 同时 可以读取数据。否则 ok 被赋
值为 false 。在这个情况下表示 channel 被关闭。
只读或只写 channel

原文地址:https://www.cnblogs.com/lvdongjie/p/6501436.html