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)" 
posted @ 2022-04-20 10:01  李若盛开  阅读(214)  评论(0)    收藏  举报