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()
}
Error occurred: this is an error
b := 0
a := 5 / b
fmt.Println(a)
runtime error: integer divide by zero
panic: 123 [recovered]
panic: I don't know what to do: 123
goroutine 1 [running]:
main.tryRecover.func1()
/Users/ding/go/coding-180/lang/errhandling/recover/recover.go:19 +0x1e0
panic(0x10a2ca0, 0x10d8850)
/usr/local/Cellar/go/1.11.4/libexec/src/runtime/panic.go:513 +0x1b9
main.tryRecover()
/Users/ding/go/coding-180/lang/errhandling/recover/recover.go:35 +0x55
main.main()
/Users/ding/go/coding-180/lang/errhandling/recover/recover.go:39 +0x20
exit status 2