创建一个没有缓存的channel,如果不去消费他,会在写入的时候导致无法写入,一致被阻塞
// NoCacheChan 测试没有缓存的channel在不被消费的情况下能不能正常推出
func NoCacheChan() {
c:=make(chan int)
go func() {
start:=time.Now().Unix()
c<-1
println("channel done")
println(time.Now().Unix()-start)
close(c)
}()
time.Sleep(3*time.Second)
<-c
println("exit")
}
执行结果
=== RUN TestNoCacheChan
exit
channel done
3
这里c一直在等待着写入,等待3s后有消费,才成功写入执行到后续流程
如果改一下,去掉消费,就泄漏了
func NoCacheChan() {
c:=make(chan int)
go func() {
start:=time.Now().Unix()
c<-1
println("channel done")
println(time.Now().Unix()-start)
close(c)
}()
time.Sleep(3*time.Second)
println("exit")
}
执行结果
=== RUN TestNoCacheChan
exit