fatal error: all goroutines are asleep - deadlock!deadlockrecover
recover()os.Exit(0)deferfatal errordefer
func main() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("在for循环中多次调用调用 t1 := <-timer1.C 引发异常:", err)
        }
    }()
    timer1 := time.NewTimer(time.Millisecond)
    for i := 0; i < 2; i++ {
        t1 := <-timer1.C  // 第二次执行到这里程序会异常中断,不会被defer捕捉,
        // 因为严格来说这不是异常,而是 fatal error: all goroutines are asleep - deadlock!
        // 因为 timer1.C 是一个 <-chan Time 类型的管道,该管道在触发一次后会被置为nil,此时读取它的值会发生阻塞
        // 所以会发生deadlock
        // 如果是多协程的话, 如果主协程要等待该协程的话,也会发生deadlock,否则只是该协程不会执行完成,不会引发异常
        // 综上, defer不能捕捉该 "异常" , 因为这不是异常,而是程序逻辑错误
        fmt.Printf("t1:%v\n", t1)
    }
}