go channel 如果该通道已经关闭了 并尝试去获取该通道值不会造成恐慌 反之如果要往以关闭通道里添加数据则会发送恐慌
func main() {
ch1 := make(chan int, 3)
ch1 <- 2
ch1 <- 1
ch1 <- 3
go func() {
for{
time.Sleep(time.Second)
elem1 := <-ch1 //这里不会发生恐慌
fmt.Printf("The first element received from channel ch1: %v\n",elem1)
}
}()
go func() {
close(ch1) //直接关闭
}()
time.Sleep(time.Second*10)
}
golang channel 有两种通道
make(chan type) //非缓冲区
make(chan type, size) //带有缓冲区