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) //带有缓冲区
原文:https://www.cnblogs.com/jackey2015/p/11714964.html