5.14 go 關閉channel

/**
 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
		管道關閉!
	
	*/
	
	
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章