Files
go_typecho/main.go
T
2026-06-02 13:52:47 +08:00

79 lines
1.8 KiB
Go

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)
}
}