Go recover函数

本文介绍了Go语言中如何使用`defer`和`recover`来处理`panic`异常。当`panic`发生时,`recover`可以捕获并恢复异常,允许程序继续执行。示例代码展示了在`main`函数和`fn1`函数中如何运用`defer`和`recover`,确保在发生错误时仍能执行必要的清理操作并控制程序流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 在`defer`中调用了内置函数`recover`,`recover`会使程序从 `panic`中恢复,并返回`panic value`,recover()函数接收的值就是panic()函数传递的值
  • 导致`panic`异常的函数不会继续运行,但能正常返回
  • 在未发生`panic`时调用`recover`,`recover`会返回`nil`
  • defer函数需要定义在panic函数之前
  • 如果函数中没有定义recover函数,则panic会将错误返回到函数调用处
  • 程序中defer函数的执行先定义后执行,执行顺序类似于栈(先进后出),这个执行顺序只针对每一函数或者方法;跳出这个函数或方法的调用部分又是一个函数或方法,则重新按照defer的定义的顺序执行
  • 程序中发生panic,这个函数后面的代码不再执行,包括后面代码中定义的defer函数

示例1

func main() {
	defer func() {
		if err := recover(); err != nil {
			log.Println("defer--->", err)
		}
	}()

	panic("提前终止程序!")
	log.Println("结束了!") // 代码不执行
}

示例2

func fn1() {
	defer func() {
		if err := recover(); err != nil {
			log.Println("defer--->", err)
		}
	}()

	panic("fn1函数报错了")
}

func fn2() {
	log.Println("这里是fn2函数")
}

func main() {
	for i := 0; i < 3; i++ {
		fn1()   // 当fn1函数报错时,recover恢复报错,程序继续向下执行
		fn2()
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值