Files
ai_wht_wechat/go_backend/main.go
2026-01-06 19:36:42 +08:00

102 lines
2.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"ai_xhs/config"
"ai_xhs/database"
"ai_xhs/middleware"
"ai_xhs/router"
"ai_xhs/service"
// "ai_xhs/tools" // 临时注释,避免包冲突
"ai_xhs/utils"
"flag"
"fmt"
"log"
"github.com/gin-gonic/gin"
)
func main() {
// 解析命令行参数
env := flag.String("env", "dev", "运行环境: dev, prod")
flag.Parse()
// 加载配置
if err := config.LoadConfig(*env); err != nil {
log.Fatalf("配置加载失败: %v", err)
}
// 初始化数据库
if err := database.InitDB(); err != nil {
log.Fatalf("数据库初始化失败: %v", err)
}
// 初始化Redis
if err := database.InitRedis(); err != nil {
log.Fatalf("Redis初始化失败: %v", err)
}
defer database.CloseRedis()
// 初始化OSS
log.Printf("OSS配置: Endpoint=%s, AccessKeyID=%s..., AccessKeySecret=%s..., BucketName=%s",
config.AppConfig.Upload.OSS.Endpoint,
config.AppConfig.Upload.OSS.AccessKeyID[:8],
config.AppConfig.Upload.OSS.AccessKeySecret[:8],
config.AppConfig.Upload.OSS.BucketName)
if err := utils.InitOSS(); err != nil {
log.Fatalf("OSS初始化失败: %v", err)
}
log.Println("OSS客户端初始化成功")
// 初始化短信服务
smsService := service.GetSmsService()
smsService.StartCleanupTask()
log.Println("短信服务已初始化")
// 启动服务监控(宕机时发送短信通知)
// 临时注释避免tools包冲突导致编译失败
// monitor := tools.GetServiceMonitor("15707023967", "AI小红书服务")
// monitor.StartMonitoring()
// log.Println("服务监控已启动")
// 自动迁移数据库表
//if err := database.AutoMigrate(); err != nil {
// log.Fatalf("数据库迁移失败: %v", err)
//}
// 初始化定时任务
if config.AppConfig.Scheduler.Enabled {
scheduler := service.NewSchedulerService(
config.AppConfig.Scheduler.MaxConcurrent,
config.AppConfig.Scheduler.PublishTimeout,
)
if err := scheduler.Start(config.AppConfig.Scheduler.PublishCron); err != nil {
log.Fatalf("定时任务启动失败: %v", err)
}
log.Println("定时任务服务已启动")
defer scheduler.Stop()
} else {
log.Println("定时任务服务已禁用")
}
// 设置运行模式
gin.SetMode(config.AppConfig.Server.Mode)
// 创建路由
r := gin.New()
// 添加中间件
r.Use(gin.Recovery()) // 崩溃恢复
r.Use(middleware.RequestLogger()) // API请求日志
// 设置路由
router.SetupRouter(r)
// 启动服务
addr := fmt.Sprintf(":%d", config.AppConfig.Server.Port)
log.Printf("服务启动在端口 %s, 环境: %s", addr, *env)
if err := r.Run(addr); err != nil {
log.Fatalf("服务启动失败: %v", err)
}
}