defer+recover机制处理错误
defer
defer:这是一个用来确保一个函数调用会在另一个函数执行结束时被执行的关键字。无论包围它的函数是通过返回正常结束还是通过触发一个错误而结束的,defer语句都能确保调用在函数结束前执行。通常用于资源的清理工作,比如关闭文件句柄、解锁资源、或者执行一些清理操作。
defer 语句通常放在需要被执行的资源初始化代码之后。重要的是,defer 语句是推入栈中,会按照后进先出的顺序执行,即最后一个添加的 defer 语句会首先被执行。
recover
Go标准库文档解释如下:
recover: 这是一个用来拦截并处理函数执行过程中的 panic(意外错误)的内置函数,如果在defer函数中调用recover并且有一个panic发生,recover会停止panic,并返回panic值,这样程序就能恢复正常执行了。如果没有发生panic,recover调用将返回nil。