package db import ( "database/sql" "fmt" "os" "time" _ "github.com/lib/pq" "go.uber.org/zap" ) var DB *sql.DB // 初始化数据库连接 func Init() { // 从环境变量获取数据库配置 dbHost := os.Getenv("DB_HOST") dbPort := os.Getenv("DB_PORT") dbUser := os.Getenv("DB_USER") dbPassword := os.Getenv("DB_PASSWORD") dbName := os.Getenv("DB_NAME") zap.L().Info( "💡 读取数据库配置", zap.String("host", dbHost), zap.String("port", dbPort), zap.String("user", dbUser), zap.String("dbname", dbName), ) // 构建数据库连接字符串 connStr := fmt.Sprintf( "host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", dbHost, dbPort, dbUser, dbPassword, dbName, ) var err error DB, err = sql.Open("postgres", connStr) if err != nil { zap.L().Panic("❌ 无法连接数据库", zap.Error(err)) } // 设置连接池参数 DB.SetMaxOpenConns(100) // 最大打开连接数 DB.SetMaxIdleConns(20) // 最大空闲连接数 DB.SetConnMaxLifetime(time.Hour) // 连接最大存活时间 // 验证数据库连接 if err := DB.Ping(); err != nil { zap.L().Panic("❌ 数据库连接失败", zap.Error(err)) } zap.L().Info("✅ 数据库连接验证成功") }