package main import ( _ "embed" "log" "os" "os/signal" "syscall" "net/http" "time" "github.com/gorilla/mux" ) const ( Addr = "127.0.0.1:8000" ReadTimeout = 15 * time.Second WriteTimeout = 15 * time.Second ) //go:embed VERSION.txt var versionTxt string var router *mux.Router = mux.NewRouter() func main() { run(router, Addr, WriteTimeout, ReadTimeout, []syscall.Signal{syscall.SIGTERM, syscall.SIGINT}) } func run(handler http.Handler, addr string, wTimeout time.Duration, rTimeout time.Duration, signals []syscall.Signal) { log.Println("finserv finance server was started.") defer log.Println("finserv finance server was stopped.") server := &http.Server{ Handler: handler, Addr: addr, WriteTimeout: wTimeout, ReadTimeout: rTimeout, } go server.ListenAndServe() log.Printf("Serving at http://%s\n", Addr) await(signals...) } func await(signals ...syscall.Signal) { listener := make(chan os.Signal, 1) for _, s := range signals { signal.Notify(listener, s) } sig := <-listener log.Printf("Received OS signal '%v'\n", sig) }