We'll use the GetOptions()
utils function as we have in previous chapters and we'll call GetOptions
and InitLog
in our init function so that our configuration values and logger will be set up prior to running any commands in the main
package:
package main import ( "server" . "utils" "context" "io/ioutil" "net/http" "os" "os/signal" "time" "fmt" ) func init() { GetOptions() InitLog("trace-log.txt", ioutil.Discard, os.Stdout, os.Stderr) }
Let's subscribe to the SIGINT
signal using signal Notify
. Now, we can catch a Ctrl + C event before our program abruptly stops. We'll create a quit channel to hold our signal. It only needs to have a buffer size of 1.
When our quit
channel receives a SIGINT
signal, we can begin our graceful, orderly shutdown procedure:
func main() { quit := make(chan os.Signal, 1) signal.Notify(quit, os.Interrupt)
Pay close attention to the following code. This is where we pass our functional parameters!
newServer, err :...