golang之channel基础

创建:

ch:=make(chan int)//make会创建有地址并被赋予默认值的channel
ch<-1//写入  写端写数据,读端不在读,写端阻塞
c<-ch//读出  读端读数据,写端不在写,读端阻塞
len(ch)//剩余未读取数据个数
cap(ch)//通道的容量

无缓冲channel------同步通信

ch:=make(chan int)
ch:=make(chan int,0)//或 通道容量为0 不能存储数据

有缓冲channel------异步通信

ch:=make(chan int,10)//创建容量为10的channel

关闭channel
确定不在向对端发送、接收数据 使用close(ch)关闭
对端可以判断是否关闭:
if num,ok:=<-ch;ok==true{ ok-->false//已经关闭,num没数据 ok-->true//没有关闭,num保存读到的数据 }
可以用range代替🆗
for num:=range ch{ //ch不能替换为<-ch }
1.数据不发送完不应该关闭
2.已关闭的channel不能向其写入数据
3.写端已经关闭channel,可以从中读取数据
读无缓冲channel:读到0----写端关闭
读有缓冲channel:如果缓冲区有数据,先读数据,读完数据后可以继续读,知道读到0

posted @ 2020-06-12 22:34  la_vie  阅读(191)  评论(0)    收藏  举报