Category : golang

golang
Кроссплатформенное приложение на Go руками PHP разработчика

СодержаниеИдея Стартуем! Конфигурация Сетевой запрос Использование горутин Уведомления Первая версия Рефакторинг Системный трей Интернационализация ЗаключениеЯ хочу рассказать, как подошел к изучению Go на примере разработки приложения для проверки доступности сайтов. Последовательно проведу от идеи до рефакторинга проекта, а по пути объясню выбор тех или иных решений. В начале прошлого года меня заинтересовал язык Go - подкупал рост его популярности. В вакансиях на hh всё чаще встречались треб…

  • среда, 20 мая 2026 г. в 00:00:12
golang
Почему ваши логи бесполезны и как это починить за полчаса

Три часа ночи, алерт, сервис отдаёт 500. Открываете логи и видите:2026-05-12 03:14:22 ERROR Something went wrong 2026-05-12 03:14:22 ERROR Failed to process request 2026-05-12 03:14:23 ERROR Unexpected error occurred 2026-05-12 03:14:23 INFO Request completedКакой запрос сломался? Какой пользователь? Какой endpoint? Что за ошибка? В логе этого нет. Вы начинаете прыгать по timestamp, пытаетесь руками сопоставить строки друг с другом, а если сервис обрабатывает 100 запросов в секунду, логи от ра…

  • вторник, 19 мая 2026 г. в 00:00:09
golang
Я написал свой DNS-резолвер на Go вместо того, чтобы взять Unbound. Вот почему и что из этого вышло

Привет, Хабр!Три месяца назад я начал делать NextDNS-clone для Европы. Рекурсивный DNS с фильтрацией рекламы, трекеров и malware. Первый день: открываю Unbound, читаю man, всё понятно. К вечеру понимаю, что не подходит. Через неделю пишу свой резолвер на Go и вспоминаю поговорку про человека, который решил написать почтовый сервер. Никогда такого не было, и вот опять.Сейчас в проде: 10 нод по миру, отвечает на DoH/DoT, фильтрует по миллионам доменов, RAM 60 МБ на ноду. Расскажу, почему ушёл от …

  • суббота, 16 мая 2026 г. в 00:00:08
golang
Когда bottleneck не в БД: ускоряем генерацию Excel — отчетов в Go

Всем доброго времени суток!Недавно пережитый опыт работы с отчетом хочу выставить на всеобщее обозрение, вдруг кому-то будет полезен. Чтобы не томить и сохранить более технический подход, давайте сразу начнем "разбор полёта".В какой-то момент у нас появился вот такой запрос:выгрузить Excel-отчётоколо 150k строк данныхGo + excelizeобычный HTTP endpointSQL-запросы работали быстро. Индексы были в порядке. Памяти серверу хватало.Но сам Excel-отчёт генерировался больше минуты.На локальной ма…

  • пятница, 15 мая 2026 г. в 00:00:19
golang
Как мы перестали терять игроков/пользователей при рестарте сервера: Thin WebSocket Gateway + Redis»

Одной из задач, которую мне нужно было решить, являлась проблема обрыва соединений сокета от клиентов к серверу, при перезапуске сервера.Контекст: В realtime мультиплеер игре позиции и действия игроков передаются через сервер, посредством сокета (и websockets). Online игроки есть всегда, и при обновлении сервера или перезапуске, все игроки теряли соединение и соответственно игровой процесс рушится, то есть это негативное влияние на UXОбычно, в играх и других неигровых приложениях, проихсодит пе…

  • четверг, 14 мая 2026 г. в 00:00:20
golang
Как проходят собеседования на Golang-разработчиков в 2ГИС

В последнее время мы всё чаще сталкивались с ситуациями, когда кандидаты отлично проходят HR-фильтры — автоматические и ручные — но на практике оказывается, что опыт завышен, а результаты не совпадают с ожиданиями. При этом сильные разработчики, наоборот, нередко терялись в потоке формальных анкет.  Классические собеседования перестали работать. Мы решили пересмотреть наймовый процесс, чтобы сделать его честнее для всех. Так мы добавили в процесс больше живого общения: нам важно услышать, как ч…

  • четверг, 14 мая 2026 г. в 00:00:19
golang
Как мы написали социальную сеть внутри Minecraft на 13 версиях — и почему это не было безумием

Эта статья — про инженерные решения, а не про их детали. Мы сознательно держимся высокого уровня: пишем о том, как и почему думали, а не о том, что лежит под капотом.TL;DRНебольшая команда сделала мод-социальную-сеть для Minecraft, который объединяет в общий граф друзей игроков на любых поддерживаемых версиях клиента — от 1.7.10 до 1.21.1. Поддерживаются три популярных загрузчика модов и любые клиенты Minecraft, как лицензионные, так и офлайн. Серверная часть, веб-админка, обвязка и документаци…

  • среда, 13 мая 2026 г. в 00:00:22
golang
Меня раздражает, как объясняют асинхронность

Если что такое параллелизм более-менее все разработчики понимают, то объяснение асинхронности через аналогии с кассирами/поварами не ложно, но, как мне кажется, вредно, так как вводит в очень большое заблуждение.В данной статье я разберу эту проблему на примерах Python и Go и попробую дать свою правильную аналогию. TL;DRАсинхронность и многопоточка решают одну и ту же задачу для IO-bound операций - конкурентность, - но отличаются только синтаксисом, экосистемой и производительностью. Для IO-bo…

  • среда, 13 мая 2026 г. в 00:00:20
golang
Code Review Horror Stories. Часть 2: API, ошибки и graceful shutdown

Продолжение разбора реального кода с собеседования. В первой части разобрали 8 проблем concurrency и memory: race conditions, утечки горутин, проигнорированный mutex, TOCTOU. Это была первая половина из 21 бага в одном сервисе на 150 строк.Сегодня — вторая часть. Тут нет страшных race conditions, но есть то, что выдаёт уровень разработчика на собесе: отношение к ошибкам, валидация, API design, graceful shutdown, observability. Эти баги не упадут “вдруг” в продакшене — они будут тихо пилить вам …

  • вторник, 12 мая 2026 г. в 00:00:18