Golang errors
From wikinotes
Go seems to discourage the use of exception-style control-flows,
encouraging the use of errors in return-values instead.
Returned Errors
Except for very exceptional circumstances, go encourages the use of returned error values.
func sudo(user string, command string) (exitcode int, error) { // ... if success { return 0, nil } return 1, fmt.Errorf("User does not exist") } output, err := sudo("root", "cat /etc/passwd");
Panic
panic
A
panic
is go's repacement for exceptions.
If a panic is not caught, it bubbles to the top of the application, and it exits with an error.panic("I encountered an error")recover
You can check the value of a panic (if one has been raised) using
recover()
.panic("I encountered an error") // raise a panic err := recover() // returns nil/error-msg-if-presentIt is common to handle panics in deferred functions
func main() { fmt.Println("hi") panic("I just encountered an error") defer func() { if err := recover(); err != nil { fmt.Println("Error: ", err) panic(err) // <<-- re-raise panic } } fmt.Println("bye") // <-- never runs }