Category : golang

golang
Swiss Table в Go: что изменилось в map

Когда я впервые увидел новости про Swiss Table в Go, у меня была простая мысль: "Окей, звучит неплохо, но что это реально меняет для обычного разработчика?" Снаружи почти ничего. Мы всё так же пишем map[string]int, читаем, записываем, удаляем значения и обходим map через range. Но внутри рантайма map теперь устроена иначе, и это как раз тот случай, когда изменение под капотом может заметно повлиять на производительность без переписывания бизнес-логики.Начиная с Go 1.24, встроенная map и…

  • четверг, 23 апреля 2026 г. в 00:00:10
golang
Особенности и ловушки модели памяти в Go: тайны синхронизации. Часть 2

Описание модели памяти Go начинается со слов «если вы читаете этот документ — вы излишне умный, остановитесь». Многие и правда остановились, но не автор этой статьи. Привет, Хабр! Я — Игорь Панасюк, и это вторая часть материала по мотивам моего выступления на GolangConf, где я рассказывал о модели памяти Go. В первой мы разобрались с  отношением happens before, формализмом, посмотрели практические примеры и многое другое. Сегодня поговорим о линеаризуемости исполнения, барьерах памяти (можно ли…

  • четверг, 23 апреля 2026 г. в 00:00:09
golang
Фикстуры в Go: как перестать писать инфраструктуру в автотестах

ВступлениеВсе, кто хоть раз писал интеграционные или E2E-тесты на Go, сталкивались с одной и той же проблемой: в Go нет понятия фикстур. Встроенный пакет testing просто не предоставляет такого механизма.На практике это приводит к дублированию кода и копипасте. Всё, что должно жить в инфраструктурном слое, оказывается прямо внутри тестов. Нужно открыть соединение с базой — это делается в тесте. Нужно его закрыть — тоже в тесте. Подготовка данных, инициализация клиентов, очистка состояния — всё с…

  • вторник, 21 апреля 2026 г. в 00:00:11
golang
Приватная Cвязь на Go и Flutter

От автораВ последнее время очень хочется мессенджер, в котором: Нет центрального сервера Сообщения шифруются end-to-end и не хранятся в открытом виде нигде Любой при необходимости может поднять свой сервер легко и быстро и присоедениться к общей сети Один сетевой стек вместо зоопарка протоколовНа Go есть библиотека libp2p, поддерживает работу с множеством транспортов, имеет встроенную аутентификацию пиров и предоставляет фундамент для децентрализованных P2P-сетей, которую крайне интересно было…

  • понедельник, 20 апреля 2026 г. в 00:00:15
golang
DDD в Go без красивых схем: как один платеж получил три курса валют

Писать про DDD легко, пока в примерах User, Order и пара красивых стрелочек. В проде оно обычно выглядит менее аккуратно: у клиента в интерфейсе одна сумма, списывается другая, саппорт открывает админку и видит третью.Расскажу про платежный кусок, где мы на Go в какой-то момент уперлись в курсы валют. Названия сервисов чуть изменены, но суть та же. Это не история про “как мы построили идеальную архитектуру”. Скорее наоборот: сначала сделали нормально на вид, потом оно начало протекать в самых н…

  • понедельник, 20 апреля 2026 г. в 00:00:13
golang
Деконструкция GO: CPU, RAM и что там происходит. Reordering, atomics, locks, fences. Часть 1.3

С постановкой проблем в прошлой статье мы почти закончили и вывели самое важное – природу состояния гонки и состязания за кэш. В этой статье мы также разберем оптимизацию, порождающую часть проблем синхронизации – instructions reordering, а также механизмы решения вышеуказанных проблем.В этот раз снова будет Go Assembler, а также снова будут примеры на Go. В прошлый раз это было необходимое зло во имя соответствия реальностиНапоминаю, что эта статья – часть большого цикла разбора языка программ…

  • понедельник, 20 апреля 2026 г. в 00:00:12
golang
Модно не значит правильно — про pgx, метрики и OpenTelemetry

Всё началось с одного вопроса от старшего коллеги — что pgx предоставляет для сбора метрик. Казалось простым: открыл документацию, увидел QueryTracer, решил что вот оно — замена декоратору. Проверил руками и сразу споткнулся: транзакция дала три значения вместо одного. Начал копать глубже — и нашлось три разных инструмента, QueryTracer, метрики и OpenTelemetry, которые легко перепутать если не разбираться. Эта статья о разнице между драйверами, обёртками и инструментами замера производительност…

  • воскресенье, 19 апреля 2026 г. в 00:00:16
golang
Деконструкция GO: CPU, RAM и что там происходит. Многозадачность, многопоточность, кэши, проблемы. …

В прошлой статье я немного слукавил, сказав, что мы будем разбирать атомики, барьеры и системные вызовы. Я пару дней поразмышлял и осознал – а зачем вообще это объяснять, если мы даже не знаем про причину их возникновения и проблемы, которые они решаютВ части 1.1 мы рассмотрели базовые инструкции, которые выполняет наш CPU и которыми в конечном счете и являются наши прекрасные строчки на Go. Но возникает закономерный вопрос: “Окей, мы поняли как работает на одном ядре, но Go у нас во многом про…

  • воскресенье, 19 апреля 2026 г. в 00:00:14
golang
Clean Architecture + DDD в Go: как не превратить проект в 200 файлов ни о чём

Немного цифр, прежде чем начатьПрежде чем погружаться в архитектуру, давайте посмотрим на контекст, в котором всё это происходит.По данным исследования McKinsey 2022 года, технический долг составляет до 40% всего технологического портфеля компаний. И это не просто цифра в отчёте. Согласно опросу 2024 года среди технических руководителей, у более чем 50% компаний технический долг занимает свыше четверти всего IT-бюджета, блокируя внедрение новых функций. (Источник: vFunction, 2025)При этом иссле…

  • воскресенье, 19 апреля 2026 г. в 00:00:13