Данная статья - это вырезка из книги Джона Боднера под названием "Go идиомы и паттерны проектирования". На момент чтения 14-й главы, посвященной теме контекста, мне показался полезным её подраздел про работу со значениями посредством контекста. Полезным в том смысле, что этот подраздел вполне может служить справкой для новичков сам по себе, взятый автономно из содержащей его книги. Справкой по конкретному вопросу чтения и записи значений из контекста, разумеется, а не обозревающей тему …
Проблема 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)Запрос на выполнение действия ("Завершить заказ", "Списать средства")Компонент на …
PolyJSONПолиморфная сериализация JSON — частая задача при проектировании API, UI-моделей или событийных структур. Пример структуры:[ {"type": "text", "content": "hello"}, {"type": "image", "url": "pic.jpg"} ]В Go такие данные принято представлять с помощью интерфейсов. Однако стандартный пакет encoding/json не умеет автоматически сериализовать и десериализовать структуры с полем-дискриминатором (например, "type"), котор…
🚀 Запарило ручное сканирование в 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") // ✨…
Тестирование — важнейший аспект разработки программного обеспечения, особенно для веб‑приложений. В Go тестирование встроено в язык и предоставляет мощные инструменты для написания и выполнения тестов. В этой статье мы рассмотрим поток веб‑приложения на Go, как писать модульные тесты для каждого слоя приложения.Поток веб-приложения GoПри разработке приложений на Go важно понимать, как работает поток данных и управления через каждый слой приложения. Типичный поток может выглядеть следующим образ…
Привет, Хабр! Пару лет назад мы уже выпускали подборку книг, подкастов и других ресурсов для изучения языка программирования Go. За это время коллекция полезных материалов подросла, и пришло время поделиться продолжением. Сохраняйте себе и отправляйте коллегам — пригодится как новичкам, так и опытным специалистам. Джон Боднер. Go: идиомы и паттерны проектированияИсточник.Отличная книга для того, чтобы начать знакомство с Go с нуля. Автор объясняет все от простого к сложному — от основ языка до …
ПредисловиеПрежде всего хочу сказать, что я не являюсь никаким специалистом, даже джуновского лвла, просто безработный студент, пишущий на коленке свои пет-проекты. И код, и тем более архитектура далеки от идеала. Однако, я думаю, некоторые моменты, о которых я буду рассказывать далее в статье, могут быть интересны полноценным разработчикам как бэкенда, так и ИИ-агентов. RAG и GoС технологией RAG я познакомился около года назад на хакатоне, посвященном обработке естественного языка. Там мы с ко…
О чем эта статьяХочу поделиться историей создания Telegram‑бота, который изменил мой подход к домашнему кинотеатру.Все началось с банальной лени — мне надоело каждый раз заходить на компьютер, искать торрент, скачивать фильм, а потом думать, как его передать на телевизор.Идея была простая: что если можно будет просто отправить ссылку в Telegram и получить готовый к просмотру фильм?Это работает благодаря связке Telegram‑бота и DLNA — технологии, которая позволяет смотреть скачанные фильмы на люб…
Обложка для статьи, сгенерированная нейросетью :)Если где-то неправ, поправляйте. Если есть вопросы, задавайте. :)Биты и байтыНа заре появления первых компьютеров и программ перед инженерами встала проблема представления привычных им букв, цифр и знаков в понятный компьютеру формат. Нужно было придумать, как запрограммировать компьютер так, чтобы он мог хранить, например, строку "Hello", ведь символы "h", "e", "l", "o" ему непонятны - это не на его языке.…