golang

pgxWrappy — потому что жизнь слишком коротка для ручного сканирования в Go! �

  • воскресенье, 27 июля 2025 г. в 00:00:08
https://habr.com/ru/articles/931242/

🚀 Запарило ручное сканирование в pgx? Встречайте pgxWrappy - супер-удобную обертку для PostgreSQL в Golang! 🐘💨

🔥 Больше никакого boilerplate-кода!

// 🚫 БЫЛО (кошмар на 10 строк):
rows, _ := conn.Query(ctx, "SELECT id, name FROM users")
defer rows.Close()
var users []User
for rows.Next() {
    var u User
    rows.Scan(&u.ID, &u.Name)
    users = append(users, u)
}

// ✅ СТАЛО (магия в 1 строку!):
var users []User
db.Select(ctx, &users, "SELECT id, name FROM users") // ✨ Волшебство!

✨ Главные фишки pgxWrappy

📌 Автомагическое сканирование во что угодно!

  • Структуры 🏗

  • Вложенные структуры 🏗➡🏗

  • Слайсы 🍕

  • Указатели 👉

  • Кастомные типы 🎨

� Пример с вложенностью:

type Profile struct {
    Bio  string `db:"bio"`
    Pic  string `db:"avatar_url"`
}

type User struct {
    ID      int     `db:"id"`
    Name    string  `db:"name"`
    Profile Profile `db:"profile"` // 💫 Автораскрытие вложенности!
}

// Запрос просто должен содержать profile_bio и profile_avatar_url
db.Get(ctx, &user, "SELECT ..., bio AS profile_bio, avatar_url AS profile_avatar_url ...")

🚦 Три причины выбрать pgxWrappy:

  1. ⏱ Экономия 30% времени на рутинном коде

  2. 📚 Сохраняем всю мощь pgx под капотом

  3. 🎯 Простота миграции - подходит к существующим проектам

⚡ Быстрый старт

go get -u github.com/Arlandaren/pgxWrappy # ⬇️ Одна команда - и готово!
// 🛠 Настройка за 5 секунд:
db := pgxwrappy.NewWrapper(pool) // 🎯 Вот и всё!

// 💾 Пример CRUD:
db.Get(ctx, &user, "SELECT * FROM users WHERE id=$1", 42)       // READ
db.Exec(ctx, "UPDATE users SET name=$1 WHERE id=$2", "Bob", 42) // UPDATE

🏆 Сравнение с аналогами

pgxWrappy

Чистый pgx

GORM

sqlx

Удобство

😍

😐

😊

😊

Производительность

🚀🚀🚀

🚀🚀🚀🚀

🚀

🚀🚀

Вложенные структуры

PostgreSQL фичи

✅✅

✅✅✅

✅✅

💡 Идеальный баланс между производительностью и удобством!

🎁 Бонусы:

  • 🧵 Потокобезопасность из коробки

  • 🔄 Поддержка context.Context

  • 📛 Ясные ошибки с stack trace

  • 🧩 Простое расширение функционала

💌

💖 Нравится идея? Поставьте звезду на GitHub:
https://github.com/Arlandaren/pgxWrappy

🛠 Хотите помочь? Присылайте PR и идеи!
🐞 Нашли баг? Открывайте issue!

pgxWrappy - потому что жизнь слишком коротка для ручного сканирования! 😁