package main import ( "git.beifan.cn/trace-system/backend-go/config" "git.beifan.cn/trace-system/backend-go/database" "git.beifan.cn/trace-system/backend-go/logger" "git.beifan.cn/trace-system/backend-go/routes" "github.com/gin-gonic/gin" ) func main() { // 加载配置 config.LoadConfig() cfg := config.GetAppConfig() // 初始化日志系统 if err := logger.InitializeLogger(cfg.Server.Environment); err != nil { panic("日志系统初始化失败: " + err.Error()) } defer logger.Sync() logger.Info("服务器启动", logger.String("环境", cfg.Server.Environment), logger.String("端口", cfg.Server.Port), ) // 根据环境设置 Gin 模式 if cfg.Server.Environment == "production" { gin.SetMode(gin.ReleaseMode) } else { gin.SetMode(gin.DebugMode) } // 初始化数据库 database.InitDB() // 自动迁移数据库 database.AutoMigrate() // 初始化 Gin 引擎 r := gin.New() // 添加中间件 r.Use(gin.Logger()) r.Use(gin.Recovery()) // 启用 CORS r.Use(func(c *gin.Context) { c.Writer.Header().Set("Access-Control-Allow-Origin", "*") c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With") c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE") if c.Request.Method == "OPTIONS" { c.AbortWithStatus(204) return } c.Next() }) // 配置路由 routes.SetupRoutes(r) // 设置 API 前缀 api := r.Group("/api") routes.SetupAPIRoutes(api) // 启动服务器 port := cfg.Server.Port logger.Info("服务器运行在 http://localhost:" + port) logger.Info("API 文档: http://localhost:" + port + "/api/health") logger.Info("环境: " + cfg.Server.Environment) if err := r.Run(":" + port); err != nil { logger.Fatal("服务器启动失败", logger.Err(err)) } }