Category : golang

golang
Когда atomic действительно быстрее Mutex

ВведениеПривет, Хабр! Эта статья посвящается важной теме работы в многопоточной среде. Для безопасной работы с одним ресурсом из разных горутин разработчик должен быть уверен в безопасности и обособленности действий, чтобы не создать ситуации, в которых "гонки данных" (data race) ломали бы важную логику и создавали коллизии данных.В случаях, когда нужно обращаться к одному источнику из разных горутин в Go обычно используют sync/atomic или Mutex. Основная задача текущей статьи рассказать…

  • понедельник, 14 сентября 2026 г. в 00:00:12
golang
Работа с гигантской памятью из Go на выделенном сервере

Работа с гигантской памятью из Go на выделенном сервереМассив на 160 ГиБДля одной научно-исследовательской задачи мне понадобился массив на 160 ГиБ. Требования к нему простые: максимально быстрый случайный доступ к элементам, быстрый захват памяти при создании и быстрое освобождение при уничтожении. Последние два пункта важны, потому что содержимое массива подбирается итерациями, и на каждой он создаётся заново.Выходом стал выделенный сервер и Huge Pages размером 1 ГиБ. Но прежде чем их использ…

  • суббота, 12 сентября 2026 г. в 00:00:18
golang
Когда decode(encode(x)) == x недостаточно

С сериализацией всё вроде бы просто. Есть значение x, мы превращаем его в последовательность байт, передаём куда‑то ещё, а потом восстанавливаем:x → encode → bytes → decode → x'И первое, что хочется проверить:decode(encode(x)) == xЕсли получилось — значит, сериализация работает. По крайней мере, так кажется. Потому что в этой формуле есть одна маленькая деталь, которую легко не заметить: что именно означает ==?Когда одинаковое — не то же самоеВозьмём совершенно обычный Go‑код: a := &Nod…

  • суббота, 12 сентября 2026 г. в 00:00:16
golang
Миллионы товаров и миллисекунды: как устроен специализированный движок каталога

Привет!Хочу показать проект, который сейчас запускаю для польского рынка: https://wszyst.pl.Это агрегатор товаров из разных источников. Сейчас в системе уже больше миллиона реальных товаров, а архитектура рассчитана примерно на три миллиона.Но на самом деле количество товаров здесь не самое интересное. Гораздо интереснее то, как быстро система работает с таким объёмом данных.Например, обычная страница каталога с фильтрами, сортировкой и пагинацией обрабатывается примерно за 12 мс. Если необходи…

  • суббота, 12 сентября 2026 г. в 00:00:15
golang
Отвратительные вопросы для Гофера

Привет!К вам пришёл кандидат, который идеально проходит по всем критериям, но у него "не тот вайбик" или вам нравится давать необоснованные отказы? Тогда эта статья для вас! Я собрал несколько вопросов, которые абсолютно бесполезны в реальной разработке (только если вы не собеседуете Робов Пайков в Google), на которые почти точно ни один адекватный кандидат никогда не ответит. Если отбросить шутки (вы же поняли, что я шучу?), то перед вами фан-подборка каверзных, глупых и душных вопросо…

  • пятница, 11 сентября 2026 г. в 00:00:21
golang
Документация, которая не врёт

В прошлой статье я рассказывал, как лень довела меня до кодогенератора для биндинга и валидации. Закончил я обещанием: теги оказались не приватным входом одного инструмента, а объявлением, которое может прочитать кто угодно. Вот второй читатель.Две одинаково безнадёжные крайностиС документацией к API у меня было два опыта, и оба плохие.Написанная руками. Красивый openapi.yaml, в нём примеры, описания семантики, разложенные по полочкам коды ошибок. Ровно до первого релиза. Потом кто-то добавил п…

  • пятница, 11 сентября 2026 г. в 00:00:19
golang
Как засунуть Protobuf в CEL и выиграть (или проиграть): наш опыт в MWS Cloud Platform

Всем привет! Меня зовут Михаил Голубев, и я работаю в команде Kubernetes Security, MWS Cloud Platform. В этой статье я расскажу об одной попытке оптимизации: как мы залезли под капот CEL и Protobuf, чтобы научить интерпретатор читать данные из бинарного формата на лету без полной десериализации, и почему в итоге от этого кода пришлось отказаться. Почему мы вообще этим озадачились: в одном из наших микросервисов реализовано сканирование приходящих событий по k8s-манифестам. Событий летит много,…

  • пятница, 11 сентября 2026 г. в 00:00:19
golang
Как можно плохо сделать маленький тест если ты — большая компания? А вот же:)

Когда рекламный баннер «Пройди Тест по Go от Selectel» всплыл уже четвертый раз за день — я сдался. Нажал и пошёл проходить тест — несмотря на аннотацию уровень оказался очень «базовым» так что через несколько минут я завершил его всего с одной ошибкой.Это событие не стоило бы упоминать — но «впечатлило» оформление и воплощение теста — как можно видеть ниже — из‑за неаккуратности составителей даже и ответ где‑то иной подходит. Попытался об этом написать приватно, почтой — но, кажется, безуспешн…

  • четверг, 10 сентября 2026 г. в 00:00:13
golang
Маршрутизация электромобилей с учётом внешних условий и зарядных станций

Всем привет!ПредисловиеВ этой статье я расскажу о своих рассуждениях и расчётах, а также рассмотрю различные подходы к маршрутизации электрокаров с учётом внешних условий и подходящих зарядных станций для их последующего бронирования. Возможно, этот материал окажется полезным и поможет вам в реализации собственных проектов.СОДЕРЖАНИЕВведение1. Ситуация с электротранспортом в мире2. Преграды для запуска «электричек» в России3. Обзор научной литературы4. Пространственная фильтрация зарядных станц…

  • четверг, 10 сентября 2026 г. в 00:00:12