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 mainimport ( "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, ...