定义
cn := make(chan int)
关闭
close(cn)
放入值
cn := make(chan int)
cn <- 0:
取出值
cn := make(chan int)
res:=<-cn
注意点1,关闭执行两次会异常
cn := make(chan int)
close(cn)
close(cn)//这里异常
注意点2,向已经关闭的chan中发送,会异常,需要使用ok的形式判断
cn := make(chan int)
close(cn)
cn <- 0://这里异常
//////////////////////////////////////////////
可以用这个方法
res,ok:=<-cn//如果已经关闭,ok为false
注意点3,向已经关闭的chan中获取值时,获取出的内容除了已经放入的,如果继续获取,将获取到对应类型的0值,可以用ok的形式
cn := make(chan int,3)
cn <- 3
cn <- 4
cn <- 5
close(cn)
t1:=<-cn//3
t2:=<-cn//4
t3:=<-cn//5
t4:=<-cn//0,因为已经取空了,所以反馈对应int的0值,如果是字符串,那就是反馈""
注意,注意,注意,特别要注意的是这个,
res,ok:=<-cn//如果已经关闭,ok为false,没有关闭,这句话就阻塞状态
这个方法当cn如果没有关闭的时候,而且cn中又没有值的时候,这句话是阻塞的
不能用ok直接处理未关闭的chan,使用单线程场景需要考虑
网友评论