Category : golang

golang
Синхронизация кеша в распределенных Go (и не только) приложениях

Заранее оговорюсь, всё что описано в данной статье, касается runtime (децентрализованного) кеша.Зачем нам такое может понадобиться? По нескольким причинам:У нас высокие требования к скорости работы приложения, дополнительные запросы к централизованному кешу нежелательны, с целью избежать сетевых взаимодействий.Компания не знает как готовить отказоустойчивый кеш (например redis), или просто не хочет/не может затягивать новую технологию, усложнять инфраструктуру.У нас нет четкого представления о …

  • среда, 14 мая 2025 г. в 00:00:08
golang
Секреты дедлоков

Как-то раз я допустил в своем коде дедлок и пока выкатывал пул реквест с его фиксом думал “ах как бы было хорошо, если дедлоки определялись на этапе компиляции”. Я решил немного разобраться в этом вопросе и вот что выяснил…Попытка определить на этапе компиляции произойдет ли в программе дедлок в теории алгоритмов более известна как “Проблема остановки” и может быть сформулирована так: “Даны описание процедуры и её начальные входные данные. Требуется определить: завершится ли когда-либо выполнен…

  • среда, 14 мая 2025 г. в 00:00:08
golang
Некоторые приёмы ООП в golang

Последние несколько лет я разрабатываю веб-приложения на го и у меня накопился опыт, которым я хочу поделиться. Я автоматизирую бизнес-процессы — пишу микросервисы для интернет-магазинов, перекладываю джейсончики. В этой области го используется как более быстрый пхп или питон :-), поэтому мои идеи могут идти вразрез с некоторыми практиками эффективного го.Парадигма и инструменты языкаЯ несколько раз встречал мнение, что го не ООП-язык. И поэтому прежде всего договоримся о том, что такое ООП.ООП…

  • вторник, 13 мая 2025 г. в 00:00:11
golang
ООП не мертво. Вы просто пользуетесь им как молотком по клавиатуре

После каждой новой статьи с заголовком «ООП — это обман» хочется напомнить: ООП — это не набор шаблонов из книжек, а инженерный подход. Если проект страдает от наследования и DI, возможно, проблема не в ООП. А в том, как вы его применяете.«Никто не знает, что такое ООП»Это правда. Все трактуют по-разному. Даже сам Алан Кэй, человек, который придумал термин, не слишком рад тому, во что это всё превратилось:> “OOP to me means only messaging, local retention and protection and hiding of state-p…

  • вторник, 13 мая 2025 г. в 00:00:10
golang
Автоматизированное E2E-тестирование App.Farm: от хаоса к системе

Когда мы только начинали работу над платформой, тестирование напоминало ручное управление парусником в шторм — много усилий, но результат непредсказуем. Разработчики вручную создавали тестовые среды, QA проверяли функционал через Postman, а о стабильности релизов можно было только мечтать. Каждый новый релиз был как лотерея: либо всё работает, либо начинается долгий процесс поиска причины багов в production.Сегодня я расскажу, как мы построили систему автоматизированного тестирования на Go и Al…

  • вторник, 13 мая 2025 г. в 00:00:09
golang
Обзор Greenmask — утилиты для логического дампа PgSQL с трансформацией данных на лету

Архитектура GreenmaskGreenmask — это кроссплатформенный инструмент, разработанный на Go специально для безопасной работы с данными PostgreSQL: он помогает делать логические бэкапы, восстанавливать таблицы и при необходимости — анонимизировать чувствительную информацию. Главное преимущество Greenmask — полная совместимость с pg_dump и pg_restore. То есть, если вы уже работаете с этими инструментами, интеграция Greenmask не потребует пересмотра всей инфраструктуры.Один из ключевых сценариев испо…

  • вторник, 13 мая 2025 г. в 00:00:08
golang
Работа с базой данных для джунов и вайбкодеров. Соединения

В эпоху генеративного ИИ многим может показаться, что знать основы тех или иных технологий вовсе не нужно - все сделает добрая LLM, а вам надо лишь правильно дать ей задание. Вот только в этом рассуждении опускается ответ на вопрос о том, что значит это "правильно". Нейросеть может сломать код в самых неожиданных местах и не исправлять его по общему запросу "найди и исправь баги". Вам придется самостоятельно искать причину поломки и тыкать бездушную машину в ее же ошибку носом. …

  • понедельник, 12 мая 2025 г. в 00:00:05
golang
Решение задачи с Route 256 на goalng

В этой статье разбирается решение задачи «Гистограммы» с контеста Route 256 от Ozon.Ссылочки:Assembler в Go: техники ускорения и оптимизации / Хабр Руководство по ассемблеру Go / Хабр Часть 1. Почему Go-ассемблер и векторизация могут быть полезны: идея для ускорения / Хабр Условие задачиГистограммой является массив, каждый элемент которого указывает высоту столбика на соответствующей позиции. Две гистограммы считаются совпадающими, если при совмещении одной гистограммы с другой гистограммой, п…

  • понедельник, 12 мая 2025 г. в 00:00:04
golang
Задачи на собеседованиях. Денежные переводы в SQL. Обновление счетов и уровни изоляций

Задача перевода денег в первом приближении сводится к обновлению пары строк и кажется простой — но обеспечение корректности при параллельном доступе может быть неожиданно сложным для только знакомящихся с уровнями изоляций БД.В этом посте я покажу примеры решения упрощенной задачи, сосредоточив внимание на проблеме обновления нескольких строк БД, уровнях изоляции и особенностях каждого подхода. Мы будем использовать SQL и Java фрагменты с комментариями.В решениях нет явных приемов против дедло…

  • воскресенье, 11 мая 2025 г. в 00:00:08