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 }