Category : golang

golang
Психанул на неудобный драйвер pgx и написал свою библиотеку. Все как по канонам гошников ) — Golang

Проблема, которую решает pgxWrappyКак разработчик на Go, я долгое время использовал pgx - безусловно, лучший драйвер для PostgreSQL. Но каждый раз, когда нужно было сканировать результаты запроса в структуры, особенно со сложной вложенностью, приходилось писать много шаблонного кода. Это отнимало время и делало код менее читаемым.После десятков проектов с pgx я решил создать решение, которое сохраняет все преимущества оригинального драйвера, но избавляет от рутинных операций.Ключевые возможност…

  • пятница, 1 августа 2025 г. в 00:00:10
golang
Как Go зависает на Windows в CancelIoEx: история одного бага

Я не считаю себя специалистом по Go и лишь изредка обращался к этому языку, но хочу поделиться историей об одном баге на стыке Go и ядра Windows, с которым мне «посчастливилось» столкнуться.Баг до сих пор остаётся актуальным (issue на GitHub), хотя есть основания надеяться, что он будет исправлен в следующем релизе Go.Тем не менее, если звёзды сойдутся неудачно и ваша программа на Go внезапно зависнет у клиента в вызове CancelIoEx, а воспроизвести и проанализировать проблему не удастся, то, над…

  • пятница, 1 августа 2025 г. в 00:00:09
golang
Резервные копии PostgreSQL: сравнение скорости pg_dump в разных форматах и с разными уровнями сжати…

Я сделал резервную копию через pg_dump и восстановился из неё 21 раза. Резервные копии делал в 4 разных форматах с использованием от 1 до 7 уровней сжатия под каждый формат. Записал результаты и сделал сравнение разных видов, чтобы понимать, какие способы более эффективны для моего сценария использования.Детали и замеры — ниже.СодержаниеЗачем мне этот замер?О форматах резервных копий и видах сжатия в pg_dumpНастройка PostgreSQLПодготовка данныхРезультаты замеровВыводы, исходя из размеровЗаключе…

  • пятница, 1 августа 2025 г. в 00:00:08
golang
Хватит спрашивать у синьоров джуниорские вопросы на собеседованиях

Я работаю программистом последние 11 лет: первые 5 лет как PHP-разработчик, а последние 6 лет как Go-разработчик. Недавно я сходил на с десяток собеседований, и они меня очень сильно разочаровали.Хватит спрашивать тонкости языка программированияВопросы вроде: "Вот у нас есть слайс в Go, мы передадим его в функцию, там вставим 3 элемента - что мы получим?" Да ерунду вы получите! Есть best practices. Если в функции модифицируете слайс - нужно возвращать новый слайс, а не играть в угадайку…

  • четверг, 31 июля 2025 г. в 00:00:07
golang
Быстро — не всегда хорошо: рейтлимиты в мультикластерном окружении

Всем привет! Кажется, настало время поговорить о том, как внедрялись ограничители частоты запросов на бэкенд в Wildberries. В статье — о том, с какими трудностями мы столкнулись на этом благородном пути и как прошли через четыре схемы реализации — от простейшей in-memory до собственных gRPC-сервисов. Не обойдём вниманием и парочку лайфхаков ;) Например, с помощью рейтлимитов мы неожиданно решили проблему плавного отключения старых версий API.Немного обо мне. Меня зовут Дмитрий Виноградов, и я л…

  • четверг, 31 июля 2025 г. в 00:00:06
golang
Контекст в Go: запись и чтение значений

Данная статья - это вырезка из книги Джона Боднера под названием "Go идиомы и паттерны проектирования". На момент чтения 14-й главы, посвященной теме контекста, мне показался полезным её подраздел про работу со значениями посредством контекста. Полезным в том смысле, что этот подраздел вполне может служить справкой для новичков сам по себе, взятый автономно из содержащей его книги. Справкой по конкретному вопросу чтения и записи значений из контекста, разумеется, а не обозревающей тему …

  • четверг, 31 июля 2025 г. в 00:00:05
golang
Практический CQRS и Event Sourcing на Go

Проблема CRUD-подхода// Проблемы: // 1. История изменений теряется // 2. Конфликты при конкурентных обновлениях (или использование блокировок) func UpdateOrderStatus(orderID string, status Status) error { return db.Exec("UPDATE orders SET status=? WHERE id=?", status, orderID) }Решение: CQRS и Event SourcingАрхитектурное ядроАрхитектураКлючевые компоненты архитектуры1. Команда (Command)Запрос на выполнение действия ("Завершить заказ", "Списать средства")Компонент на …

  • четверг, 31 июля 2025 г. в 00:00:04
golang
Полиморфизм в JSON в Go

PolyJSONПолиморфная сериализация JSON — частая задача при проектировании API, UI-моделей или событийных структур. Пример структуры:[ {"type": "text", "content": "hello"}, {"type": "image", "url": "pic.jpg"} ]В Go такие данные принято представлять с помощью интерфейсов. Однако стандартный пакет encoding/json не умеет автоматически сериализовать и десериализовать структуры с полем-дискриминатором (например, "type"), котор…

  • среда, 30 июля 2025 г. в 00:00:05
golang
pgxWrappy — потому что жизнь слишком коротка для ручного сканирования в Go! �

🚀 Запарило ручное сканирование в 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") // ✨…

  • воскресенье, 27 июля 2025 г. в 00:00:08