3)关闭无缓存的channel不会阻塞
package main import ( "fmt" ) func main(){ cb := make(chan bool) close(cb) x := <-cb fmt.Printf("%#v ", x) x, ok := <-cb fmt.Printf("%#v %#v ", x, ok) ci := make(chan int) close(ci) y := <-ci fmt.Printf("%#v ", y) }
对于关闭的channel 没有buffer的channel 读出来的为对应的0值,但如果往里面写数据的话会产生panic
4)关闭有缓存的channel
1 package main 2 3 import "fmt" 4 5 func main() { 6 c := make(chan int, 3) 7 c <- 15 8 c <- 34 9 c <- 65 10 close(c) 11 fmt.Printf("%d ", <-c) 12 fmt.Printf("%d ", <-c) 13 fmt.Printf("%d ", <-c) 14 fmt.Printf("%d ", <-c) 15 16 c <- 1 17 }
关闭之后可以读出来~但是写入还是引发panic
5)nil channel发生阻塞
1 package main 2 3 func main() { 4 var c chan int 5 <-c 6 }