Functional parameters

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, ...

Get Learning Functional Programming in Go now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.