Could you add an example for recover()? #46

Open
LarryBattle opened this Issue May 6, 2013 · 0 comments

1 participant

@LarryBattle

Here's an example I wrote up for recover(). It would be nice if you included this in your examples.

package main

import "fmt"

func gandalf( doTalkTo bool ){
    defer catch()
    if(doTalkTo){
        // Panic stops execution of the current function and stops unwinding the stack, calling an deferred functions along the way.
        panic("You shall not pass!")    
    }
}
// catch() must be called as a deferred 
func catch(){
    // recover() regains control over the program execution when panic() is called.
    // recover() returns is the argument passed from panic()
    if r := recover(); r != nil {
        fmt.Println("Error:", r)
    } else {
        fmt.Println("No problems occurred")
    }
}
func main() {
    gandalf(true)
    gandalf(false)
    //unwinds to the top of the stack and ends the program
    panic("Where am I going?");
}

// Output:
// Error: You shall not pass!
// No problems occurred
// panic: Where am I going?
// goroutine 1 [running]:
// main.main()

Demo: http://play.golang.org/p/xu9Jd1YI0T

More information here:
Effective Go - The Program Language

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment