func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr) bool { if c == nil { if !block { return false } gopark(nil, nil, waitReasonChanSendNilChan, traceEvGoStop, 2) throw("unreachable") } nil channel 读写时gopark(nil, nil, waitReasonChanSendNilChan, traceEvGoStop, 2)这句话被执行了,协程挂起了,所以 A B 是正确的
// var a chan int // nil channel var a chan int = make(chan int) close(a) // close channel a <- 1 fmt.Print(<-a)