Here’s an example of how to use recover() in Google Go.
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