注意
:通道首先要通过make函数来初始化,初始化之后才可以执行写入和读取操作。此外还分为【有缓存通道
】和【无缓存通道
】,make函数第二个参数大于1,表示有缓存;make函数的第二个参数的类型为整型,在使用make函数初始化通道时,缓存必须大于1。不可以是0。
首先看一下通道在一个协程中的例子
发送操作阻塞
package main
func main() {
var ch chan struct{
}
//ch = make(chan struct{}, 1)
ch <- struct{
}{
}
<-ch
}
运行结果
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send (nil chan)]:
main.main()
发送(写入)操作阻塞,此外通道没有初始化,nil chan
表示通道没有初始化。
接收操作阻塞
package main
func main() {
var ch chan struct{
}
ch = make(chan struct{
}, 1)
<-ch //程序到这一行直接阻塞,即使有缓存也不行,因为通道为空,读不到数据。
ch <- struct{
}{
}
}
运行结果
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]