参考答案
结论:Go中不能直接判断channel是否阻塞,但可通过select语句实现非阻塞写入。核心要点:1. channel写入阻塞条件:无缓冲channel无接收者,或有缓冲channel缓冲区满;2. 非阻塞写入使用select{ case ch<-v: 成功写入 default: 未写入};3. 若先判断再写,可能因并发导致判断后状态变化,select是原子性尝试。原理:channel底层有锁和等待队列,select多路复用检查channel状态,避免goroutine挂起。示例:select { case ch <- 1: fmt.Println("written") default: fmt.Println("channel blocked") }。