// @title GoFaster API // @version 1.0 // @description GoFaster项目API文档 // @termsOfService http://swagger.io/terms/ // @contact.name API支持 // @contact.url http://www.gofaster.com/support // @contact.email support@gofaster.com // @license.name Apache 2.0 // @license.url http://www.apache.org/licenses/LICENSE-2.0.html // @host localhost:8080 // @BasePath /api // @schemes http package main import ( "fmt" "gofaster/internal/core" "gofaster/internal/shared/config" "gofaster/internal/shared/database" "gofaster/internal/shared/logger" "gofaster/internal/shared/middleware" // 导入各模块 _ "gofaster/internal/auth" _ "gofaster/internal/workflow" "github.com/gin-gonic/gin" ginSwagger "github.com/swaggo/gin-swagger" "go.uber.org/zap" _ "gofaster/docs" swaggerFiles "github.com/swaggo/files" ) func main() { printBanner() // 初始化配置 cfg, err := config.LoadConfig() if err != nil { panic(fmt.Sprintf("配置加载错误: %v\n", err)) } // 初始化日志 log := logger.NewLogger(cfg.Log.Level, cfg.Log.Path) defer log.Sync() // 初始化数据库 db, err := database.NewDB(&cfg.DB) if err != nil { log.Fatal("Failed to connect database", zap.Error(err)) } // 初始化Redis redisClient := database.NewRedisClient(&cfg.Redis, log) defer redisClient.Close() // 创建模块管理器 moduleManager := core.NewModuleManager(log) // 自动发现并注册模块 if err := core.DiscoverModules(moduleManager); err != nil { log.Fatal("Failed to discover modules", zap.Error(err)) } fmt.Printf("✅ 模块发现完成\n") // 初始化所有模块 if err := moduleManager.InitModules(cfg, db, redisClient); err != nil { log.Fatal("Failed to initialize modules", zap.Error(err)) } fmt.Printf("✅ 模块初始化完成\n") // 创建Gin应用 app := gin.New() app.Use( middleware.LoggerMiddleware(log, db), middleware.RecoveryMiddleware(log), middleware.CORSMiddleware(), ) // 注册路由 api := app.Group("/api") moduleManager.RegisterRoutes(api) fmt.Printf("✅ 路由注册完成\n") // Swagger路由 app.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) // 启动服务器 log.Info("Starting server", zap.String("port", cfg.Server.Port)) if err := app.Run(":" + cfg.Server.Port); err != nil { log.Fatal("Failed to start server", zap.Error(err)) } // 清理模块 moduleManager.Cleanup() } func printBanner() { fmt.Print("\033[92m") fmt.Println(` ██████╗ ██████╗ ███████╗ █████╗ ███████╗████████╗███████╗██████╗ ██╔════╝ ██╔═══██╗██╔════╝██╔══██╗██╔════╝╚══██╔══╝██╔════╝██╔══██╗ ██║ ███╗██║ ██║█████╗ ███████║███████╗ ██║ █████╗ ██████╔╝ ██║ ██║██║ ██║██╔══╝ ██╔══██║ ██║ ██║ ██╔══╝ ██╔══██╗ ╚██████╔╝╚██████╔╝██║ ██║ ██║███████║ ██║ ███████╗██║ ██║ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ `) fmt.Print("\033[0m") }