参考答案
结论:避免死锁需确保channel操作有配对、加锁顺序一致、select超时、避免协程泄露。核心要点:1)无缓冲channel读写需另一协程接应;2)多锁按固定顺序获取;3)select加default或time.After防阻塞;4)context取消;5)WaitGroup计数准。原理:死锁因所有goroutine阻塞,运行时检测全asleep则panic。避免:带缓冲channel、select default、defer解锁、errgroup。示例:select{ case ch<-1:; case <-time.After(time.Second):}。