Category : golang

golang
Делаем себе сложно

В пакете стандартной библиотеки slices есть функция Backward — итератор по элементам среза в обратном порядке:// Backward returns an iterator over index-value pairs in the slice, // traversing it backward with descending indices. func Backward[Slice ~[]E, E any](s Slice) iter.Seq2[int, E] Если вы не сильно погружены в тему дженериков и итераторов, то естественная реакция при взгляде на сигнатуру этой функции (и других из пакета slices) — «а что, нельзя попроще как-то было?».Чтобы ответить на эт…

  • воскресенье, 2 августа 2026 г. в 00:00:17
golang
Как я делал текстовую игру для веба

Привет, Хабр! Меня зовут Костя, я десять лет занимаюсь коммерческой Android-разработкой. Давно хотелось попробовать себя в вебе, а эксперименты с LLM давали некоторую уверенность в том, что по крайней мере есть шанс написать агентами поддерживаемый код и задеплоить.Что же можно сделать? Конечно тамагочи! Текстовая браузерная игра: герой живёт в мире мрачного будущего. Непрямое управление, возможность предлагать миссии, а также тюнинг предпочтений героя. Эдакий Годвилль, но на новый лад.Оглавлен…

  • суббота, 1 августа 2026 г. в 00:00:19
golang
Один интерфейс — девять LLM-провайдеров: как мы подружили Kimi K3, GLM-5.2, Claude и Ollama в одном…

Привет, Хабр! Я делаю execai — терминальный AI-агент на Go (bubbletea), в духе Claude Code. Он читает файлы, гоняет shell-команды, ходит в kubernetes и стримит ответы в TUI.В какой-то момент выяснилось, что пользователям нужен не «агент с одной моделью», а мультитул: у кого-то подписка Kimi Code за $19, у кого-то GLM Coding Plan за $18, у кого-то корпоративный ключ Anthropic, а кто-то хочет гонять Ollama локально и не платить вообще. И всё это — в одном чате, с общей историей, с переключением н…

  • суббота, 1 августа 2026 г. в 00:00:18
golang
# От firing до postmortem: рабочее место дежурного поверх Grafana и Mattermost

Алертинг у нас построен на правилах Grafana. Сами правила описаны в Terraform, хранятся в Git и применяются через CI/CD-пайплайн. Такой подход даёт review, историю изменений и воспроизводимую конфигурацию вместо ручного редактирования правил в интерфейсе.Дальше Grafana Alertmanager маршрутизирует уведомления по labels в несколько каналов внутреннего Mattermost. За этими каналами следит дежурная смена. В Grafana также есть отдельная доска, которая выводит активные алерты списком. Она помогла вид…

  • суббота, 1 августа 2026 г. в 00:00:14
golang
Как я раздаю агентам 733 инструмента из 23 мцп серверов

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

  • пятница, 31 июля 2026 г. в 00:00:08
golang
Pheme: как пет-проект «отправить пуш с сайта» дорос до федеративного E2E-мессенджера с голосом

Всё началось с обычной бытовой боли. У меня был сайт, и сайту иногда нужно было сказать мне что-то важное: «заказ оплачен», «диск на 91%», «пришёл ответ от банка». Классические варианты доставки этой мысли до моего глаза выглядели так:Почта. Работает, пока не работает. Письмо уезжает в спам, в промоакции, в «Обновления», в никуда. Ты узнаёшь о падении продакшна через сутки, разгребая папку с рассылками про скидки на матрасы.Telegram-бот. Прекрасно. До первого «мессенджер недоступен в вашей стра…

  • четверг, 30 июля 2026 г. в 00:00:09
golang
KrakenD: как мобильная логика расползлась по монолиту, а мы собрали её обратно

Всем привет! Меня зовут Рома, я бэкенд‑инженер в Банки.ру. Мы перевели мобильное API на KrakenD, и сейчас через него идёт весь трафик приложения.Начиналось всё не с выбора шлюза, а с довольно неприятного открытия: логика, обслуживающая мобильное приложение, потихоньку расползлась по монолиту — причём в те его места, где её никто не ждал. Дальше расскажу, как мы туда пришли, что делали, чтобы выбраться, и во что нам обошлось внедрение новой технологии в уже работающую инфраструктуру.Содержание д…

  • среда, 29 июля 2026 г. в 00:00:22
golang
Деконструкция Go: Runtime или программа, которая запускает вашу программу. Часть 3.1

В предыдущих частях мы разобрались с тем, во что превращается Go‑код, как процессор работает с памятью и каким образом реализуются примитивные атомарные операции.Но всё это порождает закономерный вопрос.Если CPU умеет выполнять только машинные инструкции, а операционная система знает лишь о процессах и системных потоках, то кто вообще знает о существовании горутин?Кто увеличивает их стеки?Кто решает, какую из них сейчас выполнять?Кто собирает мусор?Ответ на всё это один — Go runtime.Но runtime …

  • вторник, 28 июля 2026 г. в 00:00:08
golang
Opsgenie ушёл, JSM не пришёл: как я собрал собственный incident management с AI

Первая работающая beta за две календарные недели по вечерам и один вывод: AI создаёт код, но продукт создаёт harness.Когда Atlassian объявила о завершении продаж Opsgenie, я сначала отреагировал как нормальный инженер: решил ничего не переписывать. Потом календарь напомнил, что нормальность имеет срок действия. Продажи Opsgenie прекратились 4 июня 2025 года, а поддержка завершится 5 апреля 2027 года. После этого сервис станет недоступен, а немигрированные данные будут удалены. Это не слух из ра…

  • вторник, 28 июля 2026 г. в 00:00:07