Go: Recover from a panic
A panic is caused either by a runtime error or an explicit call to the built-in panic function.
A program recovers from a panic by calling the built-in function recover, after which normal execution is resumed. Since all the functions ordinary code is skipped during a panic, the only chance you have to call recover is from within a deferred function.
The recover function returns whatever you gave as argument to the panic function. (During normal operation it will return nil.)
Another example
func main() {
        s := foo()
        fmt.Printf("main received: %q\n", s)
}
func foo() string {
        defer func() {
                if err := recover(); err != nil {
                        fmt.Printf("recovering from: %q\n", err)
                }
        }()
        s := "before"
        panic("disaster")
        s += " after"
        return s
}
Output:
recovering from: "disaster"
main received: ""
Since the panic occured before foo returned a value, s in main still has its initial zero value "":
Return a value
To return a value during a panic, use a named return value:
func main() {
        s := foo()
        fmt.Printf("main received: %q\n", s)
}
func foo() (s string) {
        defer func() {
                if err := recover(); err != nil {
                        fmt.Printf("recovering from: %q\n", err)
                        s += " during"
                }
        }()
        s = "before"
        panic("disaster")
        s += " after"
        return s
}
Output:
recovering from: "disaster"
main received: "before during"
Comments
          Be the first to comment!