关于:recover 要放在 defer 调用的函数中,才能被执行

下面的代码,执行到 B() 的时候,recover() 没有执行,程序被中止。

func main() {
    fmt.Println("A")
    B()
    fmt.Println("C")
}

func B() {
    defer recover()
    panic("Panic in B")  // 抛出异常
}

下面的代码,执行到 B() 的时候,recover() 被执行,程序恢复执行。

func main() {
    fmt.Println("A")
    B()
    fmt.Println("C")
}

func B() {
    defer func() {
        recover()
    }()
    panic("Panic in B")  // 抛出异常
}

这是“无闻”老师的视频教程《Go编程基础 - 09函数》中的一个示例,刚开始不明白为什么直接执行 defer recover() 没有效果,后来突然想到“无闻”老师在讲 defer 的时候说过“recover 只有在 defer 调用的函数中有效”,这才明白过来。

共 0 个回复