一、recover
package main
import (
"errors"
"fmt"
"runtime"
)
func main() {
four()
}
func four() {
defer func() {
if r := recover(); r != nil {
switch x := r.(type) {
case runtime.Error:
case error:
default:
}
}
}()
panic(123)
}
func three() (err error) {
defer func() {
if r := recover(); r != nil {
switch x := r.(type) {
case string:
err = errors.New(x)
case int:
err = errors.New("int err")
case error:
err = x
default:
err = errors.New("unknown panic :")
}
}
}()
panic(errors.New("I AM ERROR "))
}
func two() {
defer myRecover()
panic(123)
}
func myRecover() interface{} {
fmt.Println("myRecover")
return recover()
}
func one() {
defer func() {
if r := recover(); r != nil {
fmt.Println("错误")
}
}()
panic(1)
}