关于未初始化channel 读写问题
来源:1-6 Go 语法背后的秘密
Yu_uuuu20
2021-05-21 10:54:54
在读写nil channel的时候会永久阻塞,阅读源码发现 chansend
chanrecv
开头都判断了 ch 为 nil 就直接 gopark
了
if c == nil {
if !block {
return
}
gopark(nil, nil, waitReasonChanReceiveNilChan, traceEvGoStop, 2)
throw("unreachable")
}
想问一下为什么要这么做呢?有什么应用场景吗
1回答
https://medium.com/justforfunc/why-are-there-nil-channels-in-go-9877cc0b2308
看看这篇文章里提的例子,
TLDR; merge 多个 channel 的时候,如果 select 里的某个 case 的 channel 已经 close 了,可以把它置为 nil,避免 busy loop 浪费 CPU
相似问题
回答 1
回答 1