创建:
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
原文:https://www.cnblogs.com/la-vie-cd/p/13110913.html