cap 为 0 与 cap 为 1 的区别
这个博主讲的很好。
简单来说,也就是c := make(chan int)
与 c := make(chan int, 1)
的区别。
我们可以用 len() 函数去看一下,前者的 cap 为 0, 后者为 1。
cap 为 0 意味着存进去一个数后会堵塞
。
cap 为 1 存进去一个数后不会堵塞
。
var c = make(chan int)
package main
import "fmt"
func main() {
var c = make(chan int)
var a string
go func() {
a = "hello world"
<-c
}()
c <- 0 // 主线程走到这里会堵塞, 直到 c 中的 0 被取走, 所以协程里的 hello world 会被输出。
fmt.Println(a)
}
var c = make(chan int, 1)
package main
import "fmt"
func main() {
var c = make(chan int, 1)
var a string
go func() {
a = "hello world"
<-c
}()
c <- 0 // 主线程走到这里不会堵塞,也就是 hello world 可能来不及输出,主线程就结束了。
fmt.Println(a)
}