Category : golang

golang
context.Context в Go. Суть и частые ошибки

ВведениеПривет, Хабр! Сегодня поговорим о контексте: о его тонкостях и ошибках, которые возникают при его использовании.Что такое контекст?context.Context - это механизм для управления временем жизни операций, который появился в 2016 году в стандартной библиотеке начиная с Go 1.7. При этом то, что чаще всего называют контекстом (сам тип) является интерфейсом:type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key any) any }Исходя из …

  • понедельник, 7 сентября 2026 г. в 00:00:12
golang
f4, сайд‑проекты и помощь экосистеме Go

В процессе работы над f4, современной репродукцией Far Manager на Go, мне пришлось столкнуться с кучей ограничений экосистемы и написать массу вспомогательных библиотек, добавив недостающие кусочки паззла. Встроенный mp3 плеер f4 (да, он уже есть, пусть и на стадии PoC, вызывается по Ctrl+Shft+M) на скрине не просто так — это чуть ли не единственный плеер для *nix, нормально работающий с русскими кодировками id3v1 тэгов, для чего в том числе как раз потребовалась отдельная библиотека. Обзор все…

  • воскресенье, 6 сентября 2026 г. в 00:00:08
golang
Ваш сервис на домене клиента: CNAME, certbot и 300 строк Go вместо ACME on-demand

Есть класс фич, которые выглядят на одну строчку в тикете и на неделю в реализации. «Хочу, чтобы статус-страница жила на моём домене» — из таких. Клиент добавляет CNAME status.client.ru → status.your-service.com, и дальше начинается интересное: кто выпустит сертификат для чужого домена, кто его продлит, как не дать одному пользователю положить всю схему мусорными доменами и почему X-Forwarded-For может превратить внутренний эндпоинт в публичный.Я делал это для сервиса мониторинга — у него есть …

  • суббота, 5 сентября 2026 г. в 00:00:17
golang
Go 1.27 подменил движок encoding/json. Замерил три конфигурации и нашёл, где стало хуже

В Go 1.27 пакет encoding/json остался тем же по API и перестал быть тем же внутри: теперь это тонкий слой совместимости поверх нового encoding/json/v2. Обещание Go 1 выполняется честно, старый код компилируется и ведёт себя как раньше, но цифры под ним поменялись, причём в обе стороны. Я собрал go1.27.0 из исходников, взял старый go1.24.7 для контроля и прогнал одинаковые бенчмарки в четырёх конфигурациях. Разбор ниже: где выиграли, где потеряли полтора раза на ровном месте, что именно уже изме…

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

Итак в прошлый раз я рассказал вам про свой проект в целом ,сегодня же мы будем разбирать бекендГлубокий разбор архитектуры Zettaverse AgentHubКастомная валидация структуры flow_json и построение DAGАрхитектура DAG-оркестрацииВ основе AgentHub лежит Directed Acyclic Graph (DAG) - направленный ациклический граф, где узлы представляют собой задачи агентов, а рёбра - зависимости между ними . Это позволяет декомпозировать сложные задачи на подзадачи, назначать каждой специализированного агента и па…

  • пятница, 4 сентября 2026 г. в 00:00:11
golang
Горутины изнутри, часть 3

Финал серии про горутины и рантайм Go. Здесь то, что происходит за пределами уютного мира G/M/P: системные вызовы, сеть, сборщик мусора. Плюс полный круг планировщика, после которого вывод GODEBUG=schedtrace читается как обычный лог, и все свежее из Go 1.22-1.27: рантайм, который начал делать работу за программиста.План серии:Почему потоки ОС не масштабируются и как Go придумал GMP.Переезжающий стек, сигнал SIGURG и жизнь горутины.syscall, netpoll, полный круг планировщика и свежий Go.Короткий …

  • четверг, 3 сентября 2026 г. в 00:00:19
golang
Как быстро влиться в чужой проект и не завалить коллег вопросами: тестируем Gemini Notebook

Обычный вечер понедельника. Я уже собирался уходить домой после работы, как вдруг зацепился за разговор коллег о неком Gemini Notebook. Стало интересно, что это, как люди им пользуются, а главное — надо ли оно мне. Глянул пару обзорных видео, послушал про его плюсы, чудеса и все такое прочее, но больше всего зацепил меня тезис о том, что окно контекста у этой штуки — миллион токенов. Вечер перестал быть томным.Привет, Хабр! Меня зовут Вадим Гартман, я бэкенд-разработчик в Selectel. Недавно стал…

  • четверг, 3 сентября 2026 г. в 00:00:18
golang
От Root CA до User Authorization в nginx+apache. Часть 4. Свой web-УЦ: выпуск из браузера, роли и а…

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

  • четверг, 3 сентября 2026 г. в 00:00:17
golang
Каскад из одной аварии: как схлопнуть шторм алертов в одну карточку инцидента

Дисклеймер: я делаю self-hosted observability-платформу Gotcha, и дальше - разбор того, как в ней устроена группировка инцидентов. Механика описана так, чтобы её можно было повторить в любой своей системе алертинга: конкретный код тут вторичен, первичны грабли.Падает один узел - шлюз, гипервизор, единственный узел БД. Дальше начинается то, что дежурный видит как ковровую бомбардировку:перестают слать телеметрию хосты, которые сидят за этим узлом, - открываются инциденты “хост молчит”;гаснет upt…

  • среда, 2 сентября 2026 г. в 00:00:16