package main import ( "context" "github.com/go-chi/chi" "github.com/go-chi/chi/middleware" "log" "net/http" "os" "os/signal" "strconv" "syscall" "time" ) func startServer() { r := chi.NewRouter() if appConfig.server.logging { r.Use(middleware.RealIP) r.Use(middleware.Logger) } r.Use(middleware.Recoverer) r.Use(middleware.StripSlashes) r.Get("/", hello) r.Get("/*", servePost) address := ":" + strconv.Itoa(appConfig.server.port) srv := &http.Server{ Addr: address, Handler: r, } go func() { if err := srv.ListenAndServe(); err != nil { log.Println("Shutting down the server") } }() // Wait for interrupt signal to gracefully shutdown the server with a timeout of 10 seconds. quit := make(chan os.Signal, 1) signal.Notify(quit, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) <-quit ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := srv.Shutdown(ctx); err != nil { log.Fatal(err) } } func hello(w http.ResponseWriter, _ *http.Request) { _, _ = w.Write([]byte("Hello World!")) }