Category : golang

golang
vet молчит, -race молчит: горутины, которые переживают CI

В прошлой статье я писал, что компилятор — первый ревьюер кода, который написал агент. У этой идеи есть слепое пятно, и я в него наступил: конкурентность. Компилятор проверяет типы, go vet проверяет десяток известных шаблонов, -race ловит гонки данных. А горутина, которая никогда не завершится, — это не ошибка типов и не гонка. Код, который не слышит отмену, — тоже.Такой код собирается, проходит vet и go test -race, под нагрузкой тоже живёт. Вылезает проблема позже: на graceful shutdown, когда …

  • пятница, 25 сентября 2026 г. в 00:00:12
golang
Рулим в облака: деплой микросервиса генерации ID в Kubernetes

Привет, Хабр! Продолжаю серию статей по проектированию и разработке отказоустойчивой микросервисной системы сокращения ссылок.Если вы только присоединились, рекомендую ознакомиться с предыдущими частями:Часть 1. Определили требования к системе и декомпозировали её на независимые сервисы.Часть 2. Создали микросервис генерации уникальных идентификаторов.Наш микросервис генерации ID полностью готов, но пока живёт только в среде разработки. Сегодня подготовим его к развёртыванию в локальном Kuberne…

  • четверг, 24 сентября 2026 г. в 00:00:13
golang
Как мы вдвоем писали кроссплатформенный мессенджер: Compose Multiplatform, SFU на Go и сжатие трафи…

Идея написать собственный мессенджер появилась не от хорошей жизни. У нас была конкретная прикладная потребность: получить полностью независимый инструмент связи, который не завязан на сторонние облачные сервисы, нормально поднимается на скромных серверах и адекватно ведет себя при перебоях со связью.Мы разрабатывали другой проект, и поначалу для него был написан минимальный чат на CodeIgniter 4 с Vanilla JS и CSS плюс WebSocket‑сервер на Go. Затем стало очевидно, что такой чат слабоват, а для …

  • четверг, 24 сентября 2026 г. в 00:00:12
golang
Запустили 1 000 000 горутин на Go. Вот сколько это стоило

Каждый, кто касался Go, наверняка слышал о том, что горутина — это «легковесный поток», который управляется самим рантаймом, и именно поэтому вы можете запускать тысячи и более горутин. Нас точно не обманывают, но давайте разберёмся, почему это так и какой в этом компромисс.Что именно будем измерятьЯ планирую замерить время запуска программы, объём потребляемой оперативной памяти и загрузку процессора, а также проверить, сколько горутин действительно существует внутри программы. Будем двигаться…

  • четверг, 24 сентября 2026 г. в 00:00:10
golang
Отцы и дети. Java и Go

Данная статья содержит размышления о сильных и слабых сторонах обоих языков. Кода нет, смысла не так чтобы много — чистое словоблудие и мнение рядового разработчика. Если интересно, велком под кат.В данной статье много воды, отражены мысли и опыт воспалённого мозга, потому заранее предупреждаю: вы можете просто зря потерять своё время. Данную и любую статью нужно читать с включённым критическим мышлением и вообще понимать, что автор — «профессор лука».Идея статьи родилась в связи с повсеместной…

  • среда, 23 сентября 2026 г. в 00:00:13
golang
110 тестов, которые не проверяют код: как заставить документацию падать вместе со сборкой

Я открыл свою панель помощи и прочитал в ней про эскалации:Внутри лесенки каждая ступень уходит по своей задержке (0 = сразу); последующие ступени расширяют круг получателей.Вторая половина фразы - неправда. Ступени не расширяют круг получателей. У каждой ступени свой набор каналов, никак не связанный с предыдущей. Ступень, на которой не отмечен ни один канал, не уведомит никого - даже если каналы отмечены на первой.Разница не косметическая. Человек читает подсказку, отмечает Telegram на первой…

  • среда, 23 сентября 2026 г. в 00:00:11
golang
Как мы выдавали ключи от демозала через Telegram, но переехали на eXpress: техническое руководство …

Привет, Хабр!Меня зовут Дмитрий, я инженер в Группе Rubytech — компания производит программно‑аппаратные комплексы Скала^р и разрабатывает технологии для высоконагруженных ИТ‑инфраструктур.Вообще, наше подразделение занимается базами данных, но сегодня я расскажу про задачу, которая напрямую не была связана с рабочими обязанностями, зато ее решение сделало куда проще жизнь наших инженеров. Ниже лирическое отступление про офис, скоро вы все поймете.Помимо основного здания рядом (действительно ря…

  • среда, 23 сентября 2026 г. в 00:00:10
golang
PVS-Studio для Go: краткий обзор новых диагностических правил

Вышел PVS-Studio 8.0! Мы добавили поддержку анализа Go проектов и многое другое. В этой статье мы разберем интересные диагностические правила для Go, которые мы подготовили с выходом новой версии нашего анализатора.ВведениеВ PVS-Studio 8.0 официально появилась поддержка анализа Go проектов, а также возможность работы из IDE GoLand и Visual Studio Code (если вы используете Go).А ещё плагин для Visual Studio Code был значительно переработан и получил поддержку не только анализа Go проектов, но и …

  • вторник, 22 сентября 2026 г. в 00:00:13
golang
Почему LLMProvider недостаточно: проектируем AI Gateway для SaaS на Go

Когда начинаешь делать AI-фичу в backend-приложении, первая архитектурная идея обычно выглядит очень здраво: спрятать конкретного провайдера за интерфейсом.Что-то вроде:type LLMProvider interface { Generate(ctx context.Context, req Request) (Response, error) }Сегодня за ним OpenAI-compatible API, завтра другой провайдер, послезавтра локальная модель. Код бизнес-логики от конкретного SDK не зависит, значит архитектурная задача вроде бы решена.Я тоже начинал примерно с этого. Но по мере того …

  • вторник, 22 сентября 2026 г. в 00:00:11