recover()函数可以用于获取/拦截panic。recover()仅在defer中被调用时,才能完成此功能。
package main
import "fmt"
func main() {
panic("not good") //抛出异常,下面代码不会执行
recover() //收不到异常
fmt.Println("ok")
}
输出:
main.main()
/Users/xxx/gowork/study/test/test.go:4 +0x20
exit status 2
真确的用法:
package main
import "fmt"
func main() {
defer func() {
fmt.Println("recovered:",recover())
}()
panic("not good")
}
recovered()在defer中简介通过函数调用将不能捕获panic。
package main
import "fmt"
func doRecover() {
fmt.Println("recovered =>",recover())
}
func main() {
defer func() {
doRecover() //这里间接调用recover不能捕获panic
}()
panic("not good")
}