Typo correction

"显示" => "显式"
This commit is contained in:
kun
2012-10-01 18:04:27 -06:00
parent d5e4d8c5ec
commit 0661fbd778

6
2.7.md
View File

@@ -80,7 +80,7 @@ channel通过操作符`<-`来接收和发送数据
fmt.Println(x, y, x + y)
}
默认情况下channel接收和发送数据都是阻塞的除非另一端已经准备好这样就使得Goroutines同步变的更加的简单而不需要显的lock。所谓阻塞也就是如果读取value := <-ch它将会被阻塞直到有数据接收。其次任何发送ch<-5将会被阻塞直到数据被读出。无缓冲channel 是在多个goroutine之间同步很棒的工具。
默认情况下channel接收和发送数据都是阻塞的除非另一端已经准备好这样就使得Goroutines同步变的更加的简单而不需要显的lock。所谓阻塞也就是如果读取value := <-ch它将会被阻塞直到有数据接收。其次任何发送ch<-5将会被阻塞直到数据被读出。无缓冲channel 是在多个goroutine之间同步很棒的工具。
##Buffered Channels
上面我们介绍了默认的非缓存类型的channel不过Go也允许指定channel的缓冲大小很简单就是channel可以存储多少元素。ch:= make(chan bool, 4)创建了可以存储4个元素的bool 型channel。在这个channel 中前4个元素可以无阻塞的写入。当写入第5个元素时代码将会阻塞直到其他goroutine从channel 中读取一些元素,腾出空间。
@@ -131,11 +131,11 @@ channel通过操作符`<-`来接收和发送数据
}
}
`for i := range c`能够不断的读取channel里面的数据直到该channel被显的关闭。上面代码我们看到可以显的关闭channel生产者通过关键字`close`函数关闭channel。关闭channel之后就无法再发送任何数据了在消费方可以通过语法`v, ok := <-ch`测试channel是否被关闭。如果ok返回false那么说明channel已经没有任何数据并且已经被关闭。
`for i := range c`能够不断的读取channel里面的数据直到该channel被显的关闭。上面代码我们看到可以显的关闭channel生产者通过关键字`close`函数关闭channel。关闭channel之后就无法再发送任何数据了在消费方可以通过语法`v, ok := <-ch`测试channel是否被关闭。如果ok返回false那么说明channel已经没有任何数据并且已经被关闭。
>记住应该在生产者的地方关闭channel而不是消费的地方去关闭它这样容易引起panic
>另外记住一点的就是channel不像文件之类的不需要经常去关闭只有当你确实没有任何发送数据了或者你想显的结束range循环之类的
>另外记住一点的就是channel不像文件之类的不需要经常去关闭只有当你确实没有任何发送数据了或者你想显的结束range循环之类的
##Select
我们上面介绍的都是只有一个channel的情况那么如果存在多个channel的时候我们该如何操作呢Go里面提供了一个关键字`select`,通过`select`可以监听channel上的数据流动。