/**
channel 不像文件一樣需要經常去關閉,只有當你確定沒有任何發送數據了,或者你想顯式的結束range
循環之類的,纔去關閉channel.
關閉channel後,無法再向channel發送數據,否則引起panic
關閉channel後,可以繼續接收數據
對於nil channel 無論收發都會被阻塞
*/
package main
import (
"fmt"
)
func main(){
//創建一個無緩存的channel
ch:=make(chan int)
//新建一個goroutine
go func(){
for i:=0;i<5;i++{
ch <- i //往通道寫數據
}
close(ch)//關閉後無法在發送數據
//ch<-88
}()//別忘了()
for{
if num,ok:=<-ch;ok==true{
fmt.Println("取到值=",num)
}else{//管道關閉
fmt.Println("管道關閉!!!")
break
}
}
/**
輸出:
F:\goWorkSpace\study\05協程>go run 14_關閉channel.go
取到值= 0
取到值= 1
取到值= 2
取到值= 3
取到值= 4
管道關閉!
*/
}