package server import ( "context" "log/slog" "net" "net/http" "nixcn-cms/middleware" "time" "github.com/gin-gonic/gin" "github.com/spf13/viper" "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin" ) func Start(ctx context.Context) { if !viper.GetBool("server.debug_mode") { gin.SetMode(gin.ReleaseMode) gin.DisableConsoleColor() } r := gin.New() r.Use(otelgin.Middleware(viper.GetString("server.service_name"))) r.Use(middleware.GinLogger()) r.Use(gin.Recovery()) Router(r) // Start http server server := &http.Server{ Addr: viper.GetString("server.address"), Handler: r, BaseContext: func(net.Listener) context.Context { return ctx }, ReadTimeout: 10 * time.Second, WriteTimeout: 10 * time.Second, MaxHeaderBytes: 1 << 20, } slog.InfoContext(ctx, "[Server] Starting server on "+viper.GetString("server.address")) if err := server.ListenAndServe(); err != nil { slog.ErrorContext(ctx, "[Server] Error starting server!", "err", err) } }