Category : golang

golang
Утёкшие горутины теперь ищет сборщик мусора. Проверил, где он молчит

Пятьдесят из шестидесяти трёх горутин в моём тестовом сервисе не проснутся никогда. Я узнал это одной командой, без чтения дампов и без гадания по стекам.19 августа вышел Go 1.27, и в нём из эксперимента вышел профиль goroutineleak. В релиз-ноутах ему отведено полтора абзаца, что для такой штуки маловато. Я собрал тулчейн, написал под него десяток мелких программ и полез в runtime смотреть, как это устроено внутри. Ниже то, что получилось.Коротко для тех, кто спешит:Профиль показывает только те…

  • вторник, 1 сентября 2026 г. в 00:00:13
golang
Анимации в терминале — это сложно (иногда)

Привет, Хабр!Не так давно я на ровном месте занялся написанием библиотеки на Go для, казалось бы, тривиальной задачи — спиннера, который гарантированно не будет ломаться при конкурентных записях в stderr и stdout.Все началось с того, что я писал вообще другой код — консольную утилиту для запуска тестов. И захотел прикрутить туда спиннер. Но не просто спиннер, а такой, что позволил бы использовать оба потока вывода — stderr и stdout, без риска оставить артефакты на экране. Более того, во время а…

  • вторник, 1 сентября 2026 г. в 00:00:12
golang
Fluent Swap: как я вышел за пределы CRUD и начал разрабатывать matchmaking на Go

За время работы с backend‑разработкой я реализовал достаточно REST API и TODO‑подобных приложений. На них удобно отрабатывать HTTP, взаимодействие с базой данных, разделение приложения на слои и обработку ошибок. Однако в какой‑то момент задачи начинают повторяться и сводиться к одному сценарию:принять данные → сохранить в базе → вернуть ответ;принять запрос → получить данные из базы → вернуть ответ.Такой опыт создаёт необходимую основу, но почти не затрагивает долгоживущее состояние, конкурент…

  • вторник, 1 сентября 2026 г. в 00:00:11
golang
Как мы скрестили Go, Rust и MCP, чтобы построить масштабируемый оркестратор ИИ-агентов

Все сейчас пилят ИИ-агентов, но когда их становится больше трех, начинается ад. Протокол MCP (Model Context Protocol) частично решает проблему, но готовых инструментов для глобальной оркестрации, настройки прав (RBAC) и визуального контроля логики на рынке просто нет. Мы задолбались собирать костыли и решили написать свой кастомный хабПочему я выбрал для бекенда именно GoКогда мы говорим об оркестрации ИИ агентов важным становится конкурентность, предсказуемое потребление памяти и скорость сете…

  • вторник, 1 сентября 2026 г. в 00:00:10
golang
Мой первый KitRover: попытка сделать машинку с управлением по сети (часть 3)

Мой первый KitRover: попытка сделать машинку с управлением по сети (часть 1)Мой первый KitRover: попытка сделать машинку с управлением по сети (часть 2)ВступлениеВ предыдущей статье рассказал, как сделал управление с телефона. Теперь можно управлять машинкой в пределах комнаты, но для выезда за её пределы, хотелось видеть, куда движется устройство на экране. Чем я и начал заниматься дальше.LiveKitНастраивая звонки для одного из сервисов, я познакомился с проектом LiveKit. Несложно поднять в Doc…

  • воскресенье, 30 августа 2026 г. в 00:00:05
golang
MTProxy + WEB + сайт на одном порту с помощью telEgo

telEgo - шустрый Telegram прокси на Go, в последней версии которого появилась поддержка всех четырёх WEB протоколов.Telegram Desktop теперь умеет подключаться через WEB proxy. Снаружи такое соединение выглядит как работа обычного сайта: клиент открывает HTTPS-страницу в браузере, а она становится транспортом между Telegram Desktop и прокси.У тех, кто уже держит свой MTProxy, сразу возникает практический вопрос: что делать с портом 443? Его нельзя одновременно отдать MTProxy и Nginx. Переносить …

  • суббота, 29 августа 2026 г. в 00:00:11
golang
От Root CA до User Authorization в nginx+apache. Часть 3. Вход по клиентскому сертификату: прокси и…

Продолжение первой и второй частей. В первой мы развернули двухуровневую инфраструктуру: Root CA и три промежуточных центра — Person, Server и Code. Во второй научились отзывать сертификаты, раздавать CRL и подняли OCSP-responder. В самом начале первой части я обещал «беспарольный вход в админку». Пришло время его получить.Как и предыдущие части, статья задумана как подробное пособие: по каждой директиве и каждой переменной приведён расширенный справочник — синтаксис, допустимые значения, умолч…

  • пятница, 28 августа 2026 г. в 00:00:13
golang
Fire‑and‑forget в Go: практический гайд по управляемым фоновым задачам

Сейчас неконтролируемые вызовы go func() встречаются уже не так часто, как на заре Go.Наверняка многие знают о принципе: «Никогда не запускайте горутину, если не знаете, как она завершится». И всё же мне до сих пор время от времени попадаются несинхронизированные вызовы go func(), которые запускают задачи без ожидания результата.Я не говорю о заданиях, переданных в специализированную очередь задач вроде Asynq. В таком случае система управления задачами сама отвечает за жизненный цикл запущенных…

  • пятница, 28 августа 2026 г. в 00:00:12
golang
Построение агентов на A2A с изолированным исполнением на Go: запускаем ИИ-разработчика в облаке, со…

Меня зовут Вера Касьяненко, я разработчик из команды DevRails AI в MTS Web Services. Сейчас мы создаем агента-разработчика — сервис, в котором языковая модель сама пишет код, запускает тесты, делает ревью и создает коммиты.Когда прикручиваешь модель к сервису и выдаешь ей инструменты, довольно быстро обнаруживается неудобный факт: команды, которые она генерирует, где-то выполняются. И от ответа на вопрос, где именно — и кто этим местом управляет, — зависит вся остальная архитектура.В статье рас…

  • четверг, 27 августа 2026 г. в 00:00:07