package main
import "fmt"
func main() {
// 初始化channel
// channel在使用之前,必须进行make初始化
// 否则,它会是一个nil
ch := make(chan int)
// fmt.Println(ch)
// 输出channel
go func() {
fmt.Println(<-ch)
}()
// 输入channel
ch <- 1
// 关闭channel
close(ch)
fmt.Println(ch)
// ch <- 2
<-ch
}
这样运行是ok的。为什么把ch <- 1 挪到 go func() {
fmt.Println(<-ch)
}()前就报错 死锁尼
无缓冲通道,在没有取之前会一直会阻塞。写在go func() 前,main方法阻塞,无法执行到go func(),ch永远不会被取数据,所以造成了死锁。