目录
一、写法
在go语言的channel中有两种写法分别是
//无缓冲
ch := make(chan int)
//有缓冲
ch2 := make(chan int, 2)
二、有无缓冲的区别:
1、串行时
不给缓冲时
func main() {
ch := make(chan int)
//发送数据
ch <- 1
//读取数据
s := <-ch
fmt.Println(s)
}
这里无缓冲会报错,死锁,原因这样执行时候并没有给其空间所以一致卡在发送数据
给缓冲时
func main() {
ch := make(chan int, 1)
ch <- 1
s := <-ch
fmt.Println(s)
}
当给予缓冲后此时程序运行没有问题,并且能够正常输出1
2、并行时
无缓冲时
func main() {
ch := make(chan int)
go func() {
ch <- 1
}()
go func() {
s := <-ch
fmt.Println(s)
}()
time.Sleep(1 * time.Second)
}
此时可以正常发送与接收到值