Go语言panic, recover
panic
停止当前函数执行
一直向上返回,执行每一层的defer
如果没有遇见recover,程序退出
recover
仅在defer中调用
获取panic的值
如果无法处理,可以重新panic
package main
import (
"fmt"
)
func tryRecover() {
defer func() {
r := recover()
if r == nil {
fmt.Println("Nothing to recover. " +
"Please try uncomment errors " +
"below.")
return
}
if err, ok := r.(error); ok {
fmt.Println("Error occurred:", err)
} else {
panic(fmt.Sprintf(
"I don't know what to do: %v", r))
}
}()
panic(errors.New("this is an error"))
func main() {
tryRecover()
}
系统的panic也可以捕捉到。
但是panic()的参数是interface{},可以传入任何值,而recover()的返回值也是interface{},所以recover不知道如何处理的时候需要继续panic处理。
加入传入一个panic(123)
Last updated
Was this helpful?