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.