学习积累

go defer, painc, recover

defer是golang语言中的关键字,用于资源的释放,会在函数返回之前进行调用。例如:

如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用。

代码:

    defer fmt.Println(1)
    defer fmt.Println(2)
    defer fmt.Println(3)
    defer fmt.Println(4)

输出顺序是:4, 3, 2, 1

Painc用法是:用于抛出错误。Recover()用法是:将Recover()写在defer中,并且在可能发生panic的地方之前,先调用此defer的东西(让系统方法域结束时,有代码要执行。)当程序遇到panic的时候(当然,也可以正常的调用出现的异常情况),系统将跳过后面的代码,进入defer,如果defer函数中recover(),则返回捕获到的panic的值。

执行代码:

package main

import "fmt"

func main() {
    fmt.Println("测试recover捕获错误, defer")
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("捕获的错误", err)
        }
    }()
    panic("自定义错误")
    fmt.Printf("这里不会执行。")
}

执行结果: 测试recover捕获错误, defer 捕获的错误 自定义错误

Be the First to comment.

Leave a Comment