GOLANG 进阶 之 异常捕获:defer 与 recover 与 Panic

本文介绍了Go语言中defer和recover的关键概念,defer用于延迟函数调用,确保在函数结束时进行清理操作,如文件解锁和数据库连接关闭。recover则用于从panic中恢复并继续执行,允许控制错误处理流程。

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

首先讲一下异常捕获,与之相关的就要了解一下几个东西:

defer

       定义:defer是Go语言提供的一种用于注册延迟调用的机制:让函数或语句可以在当前函数执行完毕后(包括通过return正常结束或者panic导致的异常结束)执行。

       作用:defer在一些需要回收资源的场景非常有用,可以很方便地在函数结束前做一些清理操作,简单来说就是为了避免程序出错的一个机制

看详细解析:

输出结果:

 

那么使用了defer会是怎么样的?

输出:

 

结论:使用defer关键字,他所作用的函数总会在最后阶段才执行,这个是不是有那么一些像堆栈里面的栈?栈的特性就是先进后出

那么这样的特性我们可以用在那里?
那些操作是需要最后做一些事情的?

1.文件的读取,读取完成之后需要释放锁,方便其他程序读取文件

2.数据库的初始化的时候需要用到defer关闭数据库连接,要不然会造成连接数过多的结果

原理:锁的作用是独占资源,这样的话会有一个致命的问题:锁一直不释放,那么是不是资源一直被占用?其他想要用到这个资源的程序就一直不能使用,那么这个时候就需要用到defer,在使用完这个资源后腰释放锁,方便其他程序使用 


recover  与  panic

recover:是一个内建函数,用于从panic中恢复并继续执行程序。

panic:这个是golang中的一个错误机制,简单点来说就是一个异常捕获的类,在程序运行的过程中,如果出现了错误,golang会调用panic来提示错误,一旦调用了panic,代码将会停止运行,简单点来说代码就会卡在错误的地方,并且提示具体的错误。

那么我们假设一下:如果一个简单的错误,或者特出处理的一些过程,我们不需要代码中断,我们只需要提示一下,然后其余代码继续执行,那么我们就需要使用defer+recover来自定义一个错误捕获机制,类似于JAVA或者PHP中的try catch

看详细解析:

 输出结果:

错误的示范:

输出结果:

结果显而易见:报错了,获取的结果没有输出,后续Say函数也不执行了,如果需要执行后续Say函数,就需要用到GoLang的错误捕获机制。

recover的返回值是一个错误err:

输出结果:

 

那我们看到:执行了Say函数,也输出了错误信息,代码也没有中断,那么目的就已经达到了,后续操作就看自己的业务需求了:

注意点:特别要注意!

defer + recover的位置一定要在业务代码前面,为什么这样讲?

前面说了这个是一种预防错误发生的机制,如果是结果在前面,就相当于事情已经发生了,再去做处理就已经迟了,如果一定是写在业务代码前面!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值