📅  最后修改于: 2023-12-03 15:15:25.091000             🧑  作者: Mango
在GO语言中,recover()是一个内置函数,用于恢复在程序运行时由 panic() 函数引起的错误。
它只在defer语句内使用,并且必须是在引发 panic() 的函数中进行处理的。
当程序运行时调用panic()函数时,程序的运行会停止,但是,在程序的退出之前可以通过使用recover()来处理panic()引起的错误,并且使程序能够正常地退出。
在定义函数时,使用defer关键字在函数离开之前执行代码。defer会等待函数返回时延迟执行,正常return语句也会触发defer,即先执行普通的return语句,再执行defer函数。
func functionA() {
defer functionB()
…
panic() //产生错误
…
}
当发生 panic() 错误时,第一次调用defer的functionB()将被调用。 functionB()也可以是一个匿名函数,如下所示:
func functionA() {
defer func() {
if err := recover(); err != nil {
log.Println("Error:", err)
}
}()
…
panic("Custom error message") //产生错误
…
}
如果程序在错误处理后仍然需要继续运行,则必须在defer函数内使用recover()。
如果程序继续运行,则recover()将返回错误代码,否则,它将返回nil。
recover()函数是一个非常强大但易于忽略的工具。使用它可以使程序更加稳定和可靠,避免因错误而引起的程序崩溃。
在使用recover()时需要小心,必须在引发panic()的函数内使用,在函数声明时使用defer关键字,在必要的情况下使用匿名函数。