gin_demo/main.go
2026-03-27 10:42:46 +08:00

43 lines
859 B
Go

package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"syscall"
di "gin_test/di"
)
func main() {
app, err := di.InitializeApp()
if err != nil {
log.Fatal("initialize app error:", err)
}
defer app.DB.Close()
server := app.Server
go func() {
log.Println("server running on", server.Addr)
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen error: %s\n", err)
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("Shutting down server...")
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), app.GracefulTimeout)
defer shutdownCancel()
if err := server.Shutdown(shutdownCtx); err != nil {
log.Fatal("Server forced to shutdown:", err)
}
log.Println("Server exited gracefully ✅")
}