Category : golang

golang
SSH как корпоративный L3-туннель: когда классические VPN-протоколы больше не работают

ВведениеВ последние годы для команд, которые работают с зарубежной инфраструктурой из России, обычный корпоративный VPN перестал быть чем-то, что можно один раз настроить и забыть. OpenVPN, WireGuard, IPsec, различные TLS- и QUIC-обёртки могут работать стабильно месяцами, а потом внезапно начать деградировать: где-то соединение не устанавливается, где-то режется UDP, где-то DPI начинает узнавать сигнатуры, где-то провайдер меняет правила фильтрации.Для компании это превращается не в техническую…

  • четверг, 21 мая 2026 г. в 00:00:19
golang
Авторизация в Go без боли: как Casbin заменяет километры if-проверок

Пока в приложении две роли и три проверки, авторизация умещается в if user.Role == "admin". Но стоит добавить пару ресурсов, ролей и исключений — и условные проверки начинают расползаться по хендлерам, дублироваться и жить своей жизнью. В этой статье разберём, как навести порядок с помощью Casbin: вынесем правила доступа из кода в конфиг, пройдём путь от простого ACL до RBAC с иерархией ролей, соберём HTTP-сервер на Go с авторизационной middleware и обсудим грабли, на которые легко наст…

  • среда, 20 мая 2026 г. в 00:00:14
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