package bootstrap import ( "allapp-go/internal/bootstrap/boots" "allapp-go/internal/config" "allapp-go/pkg/logger" "os" "os/signal" "syscall" "github.com/jackc/pgx/v5/pgxpool" ) type App struct { Config *config.Config PgSql *pgxpool.Pool } // NewApp 初始化(不阻塞) func NewApp() (*App, error) { cfg, err := config.Load() if err != nil { return nil, err } // 日志 boots.InitLogger(cfg) pgsql, err := boots.InitPgsql(cfg) if err != nil { return nil, err } // 其他组件 boots.InitUniqueId(cfg) boots.InitJwt(cfg) return &App{ Config: cfg, PgSql: pgsql, }, nil } // Run 启动服务(阻塞) func (a *App) Run() error { app, err := boots.RunServer(a.Config) if err != nil { return err } // 监听退出信号 quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit logger.Log.Info("shutting down server...") if err := app.Shutdown(); err != nil { logger.Log.Error("shutdown failed") return err } return nil } // Close 释放资源 func (a *App) Close() { if a.PgSql != nil { a.PgSql.Close() } logger.Sync() }