# 通道
兩種配合方式:
- range
- select
### range 方式
~~~
//關閉之后會跳出循環
for v:=range c{
//todo
}
~~~
### select 方式
~~~
for {
select {
case val,ok:=<-c:
if !ok{break}
}
}
~~~
### Close(ch)含義
給通道寫了一個結束標識值,接收到這個值表示通道已經關閉,有這個值就不能再寫入了,還可以繼續讀取,讀取到這個值的時候就表示已經讀取完了,通道為空了。
### 注意點
- 從一個nil channel中接收數據會一直被block。
- 從一個被close的channel中接收數據不會被阻塞,而是立即返回,接收完已發送的數據后會返回元素類型的零值(zero value)。
~~~
//如果OK 是false,表明接收的x是產生的零值,這個channel被關閉了或者為空。
//從這個關閉的channel中不但可以讀取出已發送的數據,還可以不斷的讀取零值(使用range或者判斷是否關閉可以跳出)
x, ok := <-ch
~~~