fzp-Blog

PHP

go异常 defer panic recover

1 month ago · 0 MIN READ
#Golang 

package main

import "fmt"

// go异常 defer panic recover
func main() {
    // 匿名调用 defer(压栈,如果有多个defer情况下,后进先出),
    defer func() {
        fmt.Println("第1个defer")
        defer func() {
            fmt.Println("第2个defer")
            // recover(内置函数),对异常进行捕获
            if err := recover(); err != nil {
                fmt.Println(err) // 这里的err其实就是panic传入的内容,抛出panic
            }
        }()
        fmt.Println("第1个defer结束")
    }()
    f()
    fmt.Println("此处不会运行")
}

func f() {
    fmt.Println("a")
    panic("抛出panic") // panic抛出后,寻找之前的defer,依次调用
    fmt.Println("b")
    fmt.Println("c")
}

···

Fu ZhengPei



Proudly powered by Xinhaonaner · Sign In