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
		管道关闭!
	
	*/
	
	
	
}
发布了134 篇原创文章 · 获赞 104 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/h4241778/article/details/105374477