Category : golang

golang
Genoas — ещё один генератор OpenAPI 3.1 для Go

Всем привет!Меня зовут Егор, и я уже несколько лет пишу на Go.Сегодня я хотел бы представить свой небольшой проект по генерации свагера для Go‑проектов.С чего всё началосьКогда я работал в банке, у нас были жёсткие требования: API бэкенда должно быть досконально описано. Паттерны для строк, максимальная/минимальная длина и так далее. Но главное — спецификация должна была быть версии не ниже 3.0.К сожалению, подходящих библиотек на тот момент было не то чтобы много. Я уже не говорю о том, подход…

  • суббота, 17 октября 2026 г. в 00:00:13
golang
В 39% игр в Тайного Санту двое дарят друг другу. Считаем жеребьёвку как следует

Раздать имена в Тайном Санте — задача на пять строк: перемешал список, проверил, что никто не достался сам себе, готово. Я так и думал, пока не посчитал. При таком способе почти в четырёх играх из десяти найдутся двое, которые дарят друг другу, и это не баг реализации, а свойство случайных перестановок.Я делаю сервис для Тайного Санты (My Santa), и жеребьёвка в нём — те самые пять строк, которые разрослись до ста тридцати. Ниже — почему разрослись, как устроены и какой перекос я нашёл в собстве…

  • суббота, 17 октября 2026 г. в 00:00:12
golang
Расписание ИТМО жило в приложении, а мне нужен был календарь. Поэтому я сделал сервис

Расписание живёт в приложении ИТМО, а вся моя жизнь — в календаре: работа, секции, встречи, поездки. Каждую неделю я сверял одно с другим и почти каждый раз находил расхождение. В итоге сделал сервис, который превращает расписание в подписку: одна ссылка, и пары появляются в календаре сами. Сервис неофициальный: у ИТМО такой подписки нет, поэтому её сделал я.Как былоПроще всего объяснить на примере. Однажды я приехал на пару на Кронверкский, а она оказалась перенесена на Ломоносова. Уведомлени…

  • суббота, 17 октября 2026 г. в 00:00:11
golang
Fairway: балансировщик корпоративных прокси, который сам выясняет, какой выход лучше для какого сай…

В компании редко бывает один прокси. Обычно это пара Squid в основном ЦОДе, свои прокси в филиалах и отдельные внешние выходы для облачных сервисов. Клиенты при этом настроены просто: PAC‑файл с двумя адресами по порядку, и всё.Беда в том, что «какой прокси лучше» зависит от сайта. Партнёрский банк пускает в API только с согласованных адресов, и выход питерского филиала в этот список не попал. Зеркало пакетов через европейский выход отдаёт втрое быстрее, чем через московский. Канал в филиале уз…

  • суббота, 17 октября 2026 г. в 00:00:09
golang
NKT (NetKnownsThat): open-source замена зоопарку инфраструктурных инструментов

"Я каждый день работаю с кучей инструментов для мониторинга и управления инфраструктурой и меня сильно раздражает то, что путь от момента первого запуска до нормального использования неоправданно длинный."  - Владислав, инженерМеня зовут Александр, я один из разработчиков NKT (NetKnownsThat) — нашего первого опенсоурс проектаNKT - это один бинарник на Go (~29 МБ) с встроенным веб-интерфейсом на React+TypeScript+Ant Design. Без Python, Node.js и внешних зависимостей, всё внутри бинарника…

  • суббота, 17 октября 2026 г. в 00:00:08
golang
Разворачиваем порты VPS'а: маленькая шалость программиста

При заказе VPS/VPS (уж не знаю, для каких вам нужд) - стандартная схема - при минимальной комплектации вам дают сервер, к которому можно подключиться только по SSH, и нельзя открыть никакие другие порты. Сам порт SSH может отличаться от стардартного 22-го (обычно так и происходит в начале).За дополнительную плату можно подключить опцию “статический IP” - и тогда уже можно открывать какие угодно порты и вешать на них какие угодно сервисы, веб-серверы, прокси-серверы.В целом, деньги то есть, и ту…

  • суббота, 17 октября 2026 г. в 00:00:07
golang
Замена Volume2 — Переключение аудиопотоков на win 11

Много лет я пользовался Volume²: переключал колонки и наушники хоткеем, крутил громкость с оверлеем. На Windows 11 он у меня начал подлагивать — оверлей появляется с задержкой, — а в %APPDATA%\Volume2\Errors.log периодически появляются падения:ShowOSDWindow: Access violation at address 006E0F69 in module 'Volume2.exe'. Read of address 00000000 Я завёл issue, но ждать не стал и написал себе замену под свои сценарии. Получилась утилита volume_switch: один exe в трее, ~2000 строк на Go в о…

  • пятница, 16 октября 2026 г. в 00:00:13
golang
Кoгдa яблoкo yпaлo cлишкoм близкo не к той яблoнe: copy-paste oшибки в cтpyктypнo изoмopфнoм Go кoд…

BвeдeниeНедавно вышел PVS-Studio 8.00, принёсший с собой много масштабных нововведений, среди которых и релиз анализатора для Go! Он же, в свою очередь, обзавёлся несколькими новыми интересными диагностиками.Среди них есть и та, что выявляет один из caмыx кoвapныx видoв copy-paste oшибoк, кoтopые нeoxoтнo пoпaдaютcя нa глaзa пpи oбычнoм peвью. Без лишних слов, приглашаю взглянуть на код:if process.ProcessName != nil && (len(*process.ProcessName) == 0 || len(*process.ProcessName) …

  • четверг, 15 октября 2026 г. в 00:00:13
golang
Эвалы для LLM-фич. Часть 1: зачем они нужны

Всем привет!Меня зовут Тарас Малиновский, я бэкенд‑разработчик, работаю на Go. Последний год почти целиком ушёл на проекты в сфере искусственного интеллекта: делал ассистентов, агентов, разные инструменты и навыки.Недавно участвовал в хакатоне от Podlodka AI Club: мы собирали систему памяти для агентов. Саму память реализовали довольно быстро, а вот доказать, что она реально работает, оказалось куда сложнее. На это и ушло больше всего времени.Этот опыт будто щёлкнул выключателем: именно тогда д…

  • четверг, 15 октября 2026 г. в 00:00:11