GoBlog/http.go

55 lines
1.1 KiB
Go

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!"))
}