package main import ( _ "embed" "fmt" "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 func main() { run() } func run() { log.Println("finserv finance server was started.") defer log.Println("finserv finance server was stopped.") r := mux.NewRouter() r.HandleFunc("/", hello) r.HandleFunc("/version", version) srv := &http.Server{ Handler: r, Addr: Addr, WriteTimeout: WriteTimeout, ReadTimeout: ReadTimeout, } go srv.ListenAndServe() log.Printf("Serving at http://%s\n", Addr) await(syscall.SIGTERM, syscall.SIGINT) } func hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello world!") } func version(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, versionTxt) } 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) }