Category : golang

golang
Контейнер под капотом, или Как четыре syscall'а изменили подход к эксплуатации ПО

Привет, Хабр! Меня зовут Олег, я работаю в VK Cloud в команде Key Management Service. Есть у меня такая привычка: когда пользуюсь каким-то инструментом изо дня в день, то рано или поздно хочется залезть внутрь и посмотреть, как оно там устроено. С контейнерами так и вышло: docker run, docker build — всё это прекрасно работает, но что именно происходит, когда мы «запускаем контейнер»?В этой статье разберём контейнеры не на уровне «вот вам YAML, отправляйте в прод», а чуть глубже — на уровне сист…

  • суббота, 28 февраля 2026 г. в 00:00:15
golang
Зачем тестовому фреймворку 17 функций?

Если посчитать публичный API Ginkgo, получается внушительный список. Describe, Context, When, It, Specify, By, BeforeEach, AfterEach, BeforeAll, AfterAll, JustBeforeEach, JustAfterEach, BeforeSuite, AfterSuite, SynchronizedBeforeSuite, SynchronizedAfterSuite, DeferCleanup. Семнадцать функций, и это без F- и P-вариантов для focus и pending.GoConvey проще, но и у него набирается не меньше: Convey, So, ShouldEqual, SkipConvey, FocusConvey, Reset и собственный DSL для assertion-ов.Я не считаю, что …

  • суббота, 28 февраля 2026 г. в 00:00:14
golang
Documentation-Driven Development: как мы генерируем Go-код из OpenAPI-спецификаций

Привет, Хабр. Я Матвей Лихота, старший Go-разработчик из МТС Web Services. По моему опыту, документация, которую пишут руками отдельно от кода, устаревает уже в момент следующего коммита. Из-за этого мы в команде тратили до 20% времени на поддержание актуальности swagger-документации в десятке микросервисов. И когда ошибки интеграции уже стали привычным фоном, мы все-таки решились и перевернули всё с ног на голову: внедрили Documentation-Driven Development (DDD) — подход в разработке, когда про…

  • пятница, 27 февраля 2026 г. в 00:00:13
golang
Партиционирование PostgreSQL: опыт команды Геосервисов

Всем привет! Поводом для написания этой статьи послужила ситуация, с которой мы в команде Геосервисов столкнулись.Когда наша база данных нормализованных OSM-данных достигла размеров в 600+ ГБ, VACUUM стал занимать 6+ часов. Мы начали приближаться к пределу хранилища (600 GB из 1 TB), а производительность запросов деградировала. Стало очевидным — партиционирование неизбежно.Масштаб задачи:760M nodes (179 GB data + 170 GB indexes)800M ways (120 GB data + 42 GB indexes)5B way_nodes (~150 GB)Изнача…

  • пятница, 27 февраля 2026 г. в 00:00:12
golang
B4 — обход DPI с веб-интерфейсом

B4 - инструмент обхода разноуровневых DPI на Go с удобной веб-мордой. Работает на уровне ядра Linux через NFQUEUE - перехватывает сетевые пакеты и применяет к ним техники обхода.Написан с нуля на Go - хех, это не очередной форк/обертка zapret или других существующих решений. Zapret - мощный CLI-инструмент с тонкой ручной настройкой. B4 - другой подход: веб-интерфейс, полная интеграция v2ray geodat-файлов и автоматический подбор стратегий и применение изменений на лету без перезапуска.Мне хотело…

  • четверг, 26 февраля 2026 г. в 00:00:22
golang
Паттерны конкурентности в Go. Подробный разбор. Часть 1. Worker pool

Здесь пойдет речь именно о простых примерах реализации паттернов, годных для начального понимания и использования на собеседованиях. Это будут не полноценные production-шаблоны, а схематичные примеры с подробным описанием - что и зачем.Worker poolВероятно, самый популярный паттерн на собеседованиях. Задача: Написать код, параллельно обрабатывающий некий массив входных данных фиксированным количеством "воркеров" и складывающий результаты в выходной массив.Часто можно встретить в статьях …

  • четверг, 26 февраля 2026 г. в 00:00:21
golang
Я два месяца платил 300к человеку, который тихо скармливал мои задачи в ChatGPT

У меня небольшая продуктовая команда, 12 человек, пилим B2B-логистику. Go, React, PostgreSQL, всё на кубере. Предметка скучная снаружи, но внутри — ад: у каждого перевозчика свой API, и каждый API как будто писали в пятницу вечером. У СДЭК поле tariff_code в одном эндпоинте строка, а в другом число, я до сих пор не понимаю почему, и никто там не понимает, я спрашивал.Ну и вот, осенью 2025-го у нас ушёл мидл. Типичная история — нашёл +80к в каком-то финтехе, ему там обещали «плоскую структуру и …

  • четверг, 26 февраля 2026 г. в 00:00:20
golang
glenv: синхронизируем .env файлы с GitLab CI/CD переменными без боли

Привет, Хабр!Если вы работаете с GitLab и у вас больше одного окружения — вы наверняка знаете этот ритуал: открываешь Settings → CI/CD → Variables, начинаешь вбивать переменные вручную, на пятой ошибаешься, на двадцатой теряешь счёт, на пятидесятой начинаешь сочувствовать тем, кто хранит секреты прямо в коде.Я написал glenv — CLI-инструмент на Go, который синхронизирует .env файлы с GitLab CI/CD переменными через API. Под катом — история о том, почему существующих решений не хватило, как это ус…

  • четверг, 26 февраля 2026 г. в 00:00:19
golang
автоматизация браузера и развёртывание функций прямо из терминала

Notte — платформа для автоматизации браузера. Недавно мы выпустили CLI, который позволяет управлять браузерными сессиями, запускать AI-агентов, извлекать структурированные данные и развёртывать функции автоматизации, всё это прямо из терминала.В этой статье разберём, что он умеет и как устроен.Какую проблему мы решалиБольшинство рабочих процессов автоматизации браузера начинаются локально. Вы пишете скрипт на Playwright или Puppeteer, он работает на вашей машине, а затем вы тратите время на его…

  • среда, 25 февраля 2026 г. в 00:00:14