Golang - 对未初始化的的chan进行读写,会怎么样?为什么?
写未初始化的chan
package main
// 写未初始化的chan
func main() {
var c chan int
c <- 1
}
结果分析
读写未初始化的chan都会阻塞。原因:
- 未初始化的chan此时是等于
nil
,当它不能阻塞的情况下,直接返回false
,表示写 (读)chan
失败 - 当chan能阻塞的情况下,则直接阻塞
gopark(nil, nil, waitReasonChanSendNilChan, traceEvGoStop, 2)
, 然后调用throw(s string)
抛出错误,其中waitReasonChanSendNilChan
就是刚刚提到的报错"chan send (nil chan)"