package main import ( "log/slog" "os" "goblog/config" "goblog/database" "goblog/models" "goblog/routers" "github.com/gin-gonic/gin" ) func main() { // 创建默认配置文件(如果不存在) if err := config.CreateDefaultConfig(); err != nil { slog.Error("创建默认配置文件失败", "error", err) } // 加载配置 cfg := config.Load() // 设置 Gin 模式 gin.SetMode(cfg.Server.Mode) // 初始化日志系统 logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ Level: slog.LevelInfo, })) slog.SetDefault(logger) slog.Info("启动博客系统", "app", cfg.App.Name, "theme", cfg.App.Theme, "db_driver", cfg.Database.Driver, "port", cfg.Server.Port, ) // 初始化数据库 if err := database.Init(&cfg.Database); err != nil { slog.Error("数据库初始化失败", "error", err) os.Exit(1) } // 创建默认管理员 if err := database.CreateDefaultAdmin(); err != nil { slog.Error("创建默认管理员失败", "error", err) os.Exit(1) } // 从数据库读取主题设置,如果不存在则使用配置文件中的值 theme := cfg.App.Theme var option models.Option if err := database.DB.Where("name = ? AND user_id = ?", "theme", 0).First(&option).Error; err == nil { theme = option.Value slog.Info("从数据库加载主题", "theme", theme) } else { slog.Info("使用配置文件中的主题", "theme", theme) } // 创建路由引擎 r := gin.Default() // 配置模板渲染器 routers.SetupTemplates(r, theme) // 配置所有路由 routers.SetupRoutes(r, cfg) // 启动服务器 port := routers.GetServerPort(cfg.Server.Port) slog.Info("服务器启动成功", "port", port, "mode", cfg.Server.Mode) if err := r.Run(port); err != nil { slog.Error("服务器启动失败", "error", err) os.Exit(1) } }