chan在go语言中相当于一个文件操作符,使用完成之后需要使用Close()函数关闭。
下面这段代码有两个chan,ch1是一个chan int类型,ch2是一个chan bool类型,ch1被write()函数写入10个数,被read()函数读取,ch2其实是为了防止main所在的goroutine提前退出用的。
func consumer(data chan int,done chan bool){
for{
fmt.Println("receive :",<-data)
}
done<-true
}
func produce(data chan int) {
for i := 0; i < 5; i++ {
data<-i
}
//close(data)
}
func main() {
data :=make(chan int)
done:=make(chan bool)
go consumer(data,done)
go produce(data)
<-done
}
这段代码是在producer处没有关闭通道的情况
从执行结果可以看到,当我们将10个数写完之后,如果不close(