Files
workspace/code/allapp/allapp-go-v2/internal/bootstrap/db.go
T
2026-04-01 21:51:18 +08:00

54 lines
884 B
Go

package bootstrap
import (
"allapp-go-v2/internal/config"
"allapp-go-v2/internal/pkg/logger"
"context"
"fmt"
"net/url"
"time"
"github.com/jackc/pgx/v5/pgxpool"
)
func InitDB(cfg *config.Config) (*pgxpool.Pool, error) {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
pg := cfg.Postgres
// ssl mode
sslMode := "disable"
if pg.SslMode {
sslMode = "require"
}
// 转义密码(防止特殊字符问题)
password := url.QueryEscape(pg.Password)
// 构建 DSN
dsn := fmt.Sprintf(
"postgres://%s:%s@%s:%d/%s?sslmode=%s&timezone=%s",
pg.User,
password,
pg.Host,
pg.Port,
pg.Dbname,
sslMode,
pg.TimeZone,
)
db, err := pgxpool.New(ctx, dsn)
if err != nil {
return nil, err
}
if err := db.Ping(ctx); err != nil {
return nil, err
}
logger.Log.Info("√ 数据库连接成功")
return db, nil
}