package main import ( "context" "errors" "log" "net/http" "os" "os/signal" "syscall" "time" "superbanka/internal/config" apphttp "superbanka/internal/http" ) func main() { cfg := config.Load() app, err := apphttp.NewApp(cfg) if err != nil { log.Fatalf("create app: %v", err) } defer app.Close() server := &http.Server{ Addr: cfg.HTTPAddr, Handler: app.Router(), ReadHeaderTimeout: 5 * time.Second, } go func() { log.Printf("listening on %s", cfg.HTTPAddr) if err := server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { log.Fatalf("listen: %v", err) } }() sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) <-sigCh ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := server.Shutdown(ctx); err != nil { log.Printf("shutdown http server: %v", err) } }