Category : golang

golang
Embedded SQL с группировкой запросов: элегантный подход к управлению SQL в Go

Хотелось бы сразу сделать небольшой дисклеймер. Это не супер-экспертная статья. Скажем так - это мой инсайд о том, как еще можно работать с SQL запросами в Go проекте. В этой статье я расскажу о том как удобно хранить запросы в embeded sql файлах. Решение о котором я буду писать - лишь один из инструментов в арсенале разработчика, а не универсальное решение призванное вылечить все болезни. Надеюсь тебе это будет полезно.При работе с базой данных в Go-приложениях я использовал несколько подходов…

  • понедельник, 22 декабря 2025 г. в 00:00:10
golang
Sing-Box Launcher теперь на macOS

Месяц назад я описывал wizard-подход к настройке sing-box без ручного JSON. Теперь это полноценный нативный macOS-клиент и Windows-клиент с TUN, системным прокси, menu bar, быстрым переключением узлов и решением бага Fyne через Objective-C.О чём была первая статьяВ прошлой публикации я разбирал две главные боли при работе с sing-box: ручное редактирование JSON и теги узлов, которые «плывут» после обновления подписки. Решением стал wizard — он собирает конфиг из проверенных блоков, а не редактир…

  • суббота, 20 декабря 2025 г. в 00:00:09
golang
Разбираем подводные камни, ошибки и лучшие практики при разработке Kubernetes-операторов

Kubernetes-операторы давно стали привычным инструментом автоматизации и управления сложными системами. Однако на практике их поведение далеко не такое предсказуемое, как в примерах из документации. Небольшие отклонения в логике цикла согласования, обработке ошибок или обновлении статуса быстро превращаются в зацикливание, дублирование ресурсов и прочие сюрпризы, которые трудно отладить. Новичкам полезно понимать, почему так происходит, а опытным разработчикам — помнить, какие принципы стоит дер…

  • пятница, 19 декабря 2025 г. в 00:00:09
golang
Один сервис — четыре стека: практический бенчмарк с SLO по p99 и Docker/JMeter

В этой статье представлено сравнение четырёх реализаций одного и того же сервиса поверх PostgreSQL:Spring MVC + JDBCSpring WebFlux + R2DBCKtor + JDBCGo + pgxВсе сервисы крутятся в Docker с одинаковыми ресурсными лимитами и прогоняются через один и тот же JMeter-план. Для каждого стека определяется максимальный RPS при соблюдении SLO по p99-латентности.Разберём подробно:Как устроен стенд (docker-compose, Postgres, Prometheus, Grafana, JMeter)Как реализованы сервисы и в чём различия моделей конку…

  • пятница, 19 декабря 2025 г. в 00:00:07
golang
Пишем свою in-memory базу на Go, ускоряем поиск отелей в десятки раз

Если вы когда-либо строили высоконагруженные системы поиска, то знаете, что в какой-то момент узким местом становится не код, а сама архитектура. Поиск доступных отелей — как раз тот случай: миллиарды «ночей», десятки тысяч RPS, постоянные обновления календарей, строгая консистентность и высокая цена любой ошибки. Старый стек на Python + Postgres + Redis долго тянул, но однажды стал «тормозить» настолько, что оптимизировать дальше было невозможно — SQL-запросы разрастались, реплики множились, l…

  • пятница, 19 декабря 2025 г. в 00:00:07
golang
Визуальный язык программирования в NebuLeet: эволюция и дизайн

Пару лет я в соло разрабатывал максимально нишевую игру "для программистов" (NebuLeet) на довольно нишевых технологиях (Go + ebitengine), и вот теперь, после релиза, я хочу рассказать про одну из интересных особенностей этой игры - визуальном программировании логики игровых юнитов.Визуальный язык в игре прошёл несколько итераций развития, от неявных аргументов команд через стек, до чего-то типа регистровой модели, где у ячеек памяти есть имена, а команды принимают аргументы явно.Вас ждё…

  • четверг, 18 декабря 2025 г. в 00:00:09
golang
1000 и один способ угробить программу из-за гонки данных в Go

Команда Go for Devs подготовила перевод статьи о самых коварных и трудноуловимых гонках данных в Go. Автор показывает на реальных примерах, как даже опытные разработчики легко попадают в ловушки конкурентности: от случайных захватов переменных в замыканиях до неправильного срока жизни мьютексов и скрытых гонок в стандартной библиотеке.Я пишу продакшн-приложения на Go уже несколько лет. В этом языке есть вещи, которые мне нравятся. Но есть и то, что мне не по душе: в Go слишком легко создать гон…

  • четверг, 18 декабря 2025 г. в 00:00:08
golang
Go 1.25: GOMAXPROCS учитывает CPU-лимиты в контейнерах

TL;DRGOMAXPROCS ограничивает число потоков, которые одновременно исполняют Go-код (и тем самым задаёт параллелизм выполнения горутин); раньше по умолчанию он равнялся числу логических CPU на хосте.В контейнерах с CPU-лимитами это давало рассинхронизацию: Go распараллеливался «по ноде», а Linux удерживал процесс троттлингом cgroups, ухудшая задержки.В Go 1.25 дефолтный GOMAXPROCS учитывает CPU-лимит контейнера (если он меньше CPU хоста) и периодически обновляется при изменении лимита — если GOMA…

  • четверг, 18 декабря 2025 г. в 00:00:07
golang
Как мы в Авито нашли баланс между качеством и скоростью разработки на примере фичи рекомендаций Авт…

Всем привет! Меня зовут Михаил Пашедко, я backend-разработчик в Авито в команде Автотека. Автотека — это сервис для проверки истории автомобиля, в котором вы можете получить специальный отчет. Когда в тот самый отчет решили добавить подсказки для пользователя, идея казалась простой. Небольшая рекомендательная система, которая подскажет: стоит ли покупать конкретный автомобиль, на что обратить внимание, когда лучше отказаться от сделки.Но чтобы вписать даже такую, казалось бы, небольшую фичу в э…

  • четверг, 18 декабря 2025 г. в 00:00:06