defer fmt.Println("bye")
// code zero indicates success, non-zero an error.
// defer will not run
os.Exit(9)
- Notify causes package signal to relay incoming signals to "sigs".
- If no signals are provided, all incoming signals will be relayed to "sigs".
- Otherwise, just the provided signals will.
{
// channel that we will get signals on it
sigs := make(chan os.Signal)
// channel that we will use to shutdown the app
done := make(chan bool)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
// blocking till we get os.Signal
<-sigs
// release resources
// call shutdwon functions for HTTP server, DB ...
fmt.Println("\nDoing graceful shutdown")
// send message to shutdown
done <- true
}()
fmt.Println("waiting for os.Signal")
// waiting internal shutdown message
<-done
fmt.Println("Exit")
}