Golang : How To Use Panic and Recover
In this tutorial we will understand how panic function works and how to "interrupt and recover" from the panic.
First, let's examine Panic function
package main
import "fmt"
func startPanic() {
defer func() {
fmt.Println("This will APPEAR")
}()
panic("noooo!")
}
func main() {
fmt.Println("Starting to panic...")
startPanic()
fmt.Println("This WILL NOT APPEAR ")
}
Output :
Starting to panic..
This will APPEAR
panic: noooo!
as you can see from the output. The string "This WILL NOT APPEAR" .... well, will not appear because the Panic function was invoked before the fmt.Println("This WILL NOT APPEAR ").
There are times when we need to recover from the panic and move on with life. This code below will demonstrate just that :
package main
import "fmt"
func startPanic() {
defer func() {
if error := recover(); error != nil {
fmt.Println("Recovering....", error)
}
}()
panic("noooo!")
}
func main() {
fmt.Println("Starting to panic...")
startPanic()
fmt.Println("This will APPEAR because of Recover")
}
Output :
Starting to panic...
Recovering.... noooo!
This will APPEAR because of Recover
What happen here is that we manage to catch the error with the recover() function.
if error := recover(); error != nil {
fmt.Println("Recovering....", error)
}
You can further enhance the error handling depending on your needs. Learn more at http://blog.golang.org/error-handling-and-go
Hope this tutorial will be helpful for those learning Go.
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+15.2k Golang : Convert slice to array
+4.3k Golang : The Tao of importing package
+12.7k Golang : Fix cannot use buffer (type bytes.Buffer) as type io.Writer(Write method has pointer receiver) error
+26.4k Golang : Move file to another directory
+8.4k Golang : How to protect your source code from client, hosting company or hacker?
+32.9k Golang : Integer is between a range
+19.9k Golang : Convert string slice to struct and access with reflect example
+4.5k Golang : fmt.Println prints out empty data from struct
+10.4k Golang : Secure file deletion with wipe example
+22.2k Golang : minus time with Time.Add() or Time.AddDate() functions to calculate past date
+23.4k Golang : Create PDF file from HTML file
+3.7k Chrome : How to block socketloop.com links in Google SERP?