package main import ( "context" "log" "net/http" "os" "os/signal" "syscall" "time" "github.com/edu-cloud/api-gateway/internal/config" "github.com/edu-cloud/api-gateway/internal/routing" ) func main() { cfg := config.Load() r := routing.Setup(cfg) srv := &http.Server{ Addr: ":" + cfg.Port, Handler: r, ReadTimeout: 10 * time.Second, WriteTimeout: 30 * time.Second, } // 优雅关闭 go func() { log.Printf("API Gateway listening on :%s", cfg.Port) if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("listen: %s\n", err) } }() quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit log.Println("Shutting down API Gateway...") ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := srv.Shutdown(ctx); err != nil { log.Fatal("Server forced to shutdown:", err) } log.Println("API Gateway exited") }