package main import ( "context" "gin-study/internal/controller" "log" "net/http" "os" "os/signal" "time" "github.com/gin-gonic/gin" "github.com/thinkerou/favicon" ) func main() { e := gin.Default() e.Use(favicon.New("./favicon.ico")) e.Use(gin.Recovery()) controller.Register(e) srv := &http.Server{ Addr: ":8848", Handler: e, } go func() { if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("listen: %s\n", err) } }() quit := make(chan os.Signal, 1) signal.Notify(quit, os.Interrupt) <-quit log.Println("Shutdown Server...") ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := srv.Shutdown(ctx); err != nil { log.Fatal("Server Shutdown:", err) } }