Files
meme/cmd/server/main.go
2025-09-12 16:33:52 +03:00

53 lines
1.2 KiB
Go

package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"github.com/iwasforcedtobehere/gomeme/internal/server"
)
func main() {
// Initialize the server
srv := server.New()
// Setup HTTP server
httpServer := &http.Server{
Addr: ":8080",
Handler: srv.Routes(),
ReadTimeout: 15 * time.Second,
WriteTimeout: 15 * time.Second,
IdleTimeout: 60 * time.Second,
}
// Start server in a goroutine
go func() {
log.Printf("🚀 GoMeme server starting on port 8080...")
log.Printf("🎭 Ready to generate some fucking awesome memes!")
if err := httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("Server failed to start: %v", err)
}
}()
// Wait for interrupt signal to gracefully shutdown
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("🛑 Shutting down server...")
// Graceful shutdown with timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
if err := httpServer.Shutdown(ctx); err != nil {
log.Fatalf("Server forced to shutdown: %v", err)
}
log.Println("✅ Server exited")
}