68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
|
|
"goblog/config"
|
|
"goblog/database"
|
|
"goblog/models"
|
|
"goblog/routers"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func main() {
|
|
// 加载配置
|
|
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)
|
|
}
|
|
|
|
// 从数据库读取主题设置,如果不存在则使用配置文件中的值
|
|
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)
|
|
|
|
// 启动服务器
|
|
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)
|
|
}
|
|
}
|