debuggoCritical
Exit with error code in go?
Viewed 0 times
exiterrorwithcode
Problem
What's the idiomatic way to exit a program with some error code?
The documentation for
Am I supposed to pass around some state that indicate that there's been an error, and then call
The documentation for
Exit says "The program terminates immediately; deferred functions are not run.", and log.Fatal just calls Exit. For things that aren't heinous errors, terminating the program without running deferred functions seems extreme.Am I supposed to pass around some state that indicate that there's been an error, and then call
Exit(1) at some point where I know that I can exit safely, with all deferred functions having been run?Solution
I do something along these lines in most of my real
main packages, so that the return err convention is adopted as soon as possible, and has a proper termination:func main() {
if err := run(); err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
os.Exit(1)
}
}
func run() error {
err := something()
if err != nil {
return err
}
// etc
}Code Snippets
func main() {
if err := run(); err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
os.Exit(1)
}
}
func run() error {
err := something()
if err != nil {
return err
}
// etc
}Context
Stack Overflow Q#18963984, score: 134
Revisions (0)
No revisions yet.