1.关闭channel后不能在发送数据,会引起panic错误
package main
func main(){
c := make(chan int, 10)
c <- 1
c <- 2
close(c)
c <- 3 //panic错误
}
运行文件后结果panic错误
但是可以接收数据,接收数据返回零值
package main
import "fmt"
func main(){
c := make(chan int, 10)
c <- 1
c <- 2
close(c)
//关闭后可接收数据
fmt.Println(<-c) //1
fmt.Println(<-c) //2
fmt.Println(<-c) //0
fmt.Println(<-c) //0
}
运行文件后结果:
使用for range 循环来打印接收的chan数据跳出循环
package main
import "fmt"
func main(){
c := make(chan int, 10)
c <- 1
c <- 2
close(c)
for i := range c{
fmt.Println(i)
}
}
2.给一个 nil channel 发送数据,造成永远阻塞
package main
func main() {
var c chan string
c <- "hello world" // deadlock
}
从一个 nil channel 接收数据,造成永远阻塞
package main
import "fmt"
func main() {
var c chan string
fmt.Println(<-c) // deadlock
}