go中recover的错误用法

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")
}



猜你喜欢

转载自blog.csdn.net/teacher20133/article/details/77414589