解释一下Go recover的执行时机 ?
Go语言中的recover
函数是一个内建函数,它可以被用来捕获和处理panic。recover
只在延迟函数(deferred functions)中有效。如果在延迟函数中调用recover
,并且在该goroutine中发生了panic,那么recover
会捕获panic的值并恢复正常执行。如果在非延迟函数中调用recover
,或者没有发生panic,那么recover
将返回nil。
以下是一个使用recover
的例子:
package main
import "fmt"
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from", r)
}
}()
fmt.Println("This is a normal statement.")
panic("This is a panic statement.")
}
在这个例子中,我们在deferred函数中调用recover
。当panic发生时,recover
函数会捕获panic的值(”This is a panic statement.”),打印恢复信息,并恢复程序的正常执行。如果没有这个deferred函数,panic会导致程序终止。