Архитектурный паттерн для централизованной обработки ошибок в хендлерах на Go
Статья предлагает архитектурный паттерн для централизованной обработки ошибок в HTTP-хендлерах на Go: вводится кастомный тип HTTPError и обёртка (middleware), которая перехватывает ошибки, логирует их и унифицированно формирует HTTP-ответы
Читайте здесь
👉 @GolangPortal
Статья предлагает архитектурный паттерн для централизованной обработки ошибок в HTTP-хендлерах на Go: вводится кастомный тип HTTPError и обёртка (middleware), которая перехватывает ошибки, логирует их и унифицированно формирует HTTP-ответы
Читайте здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2🤔1🌚1
Запуск и управление контейнерами Docker
Изучите, как запускать контейнеры самых разных типов (серверы, базы данных, CLI-инструменты и т.д.), взаимодействовать с ними и сформировать чёткое понимание того, как Docker управляет вашими приложениями «под капотом».
Здесь: Docker 101: Run and Manage Containers
👉 @GolangPortal
Изучите, как запускать контейнеры самых разных типов (серверы, базы данных, CLI-инструменты и т.д.), взаимодействовать с ними и сформировать чёткое понимание того, как Docker управляет вашими приложениями «под капотом».
Здесь: Docker 101: Run and Manage Containers
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3
Инструмент визуализации инфраструктуры на Go, который преобразует YAML-определения в диаграммы Graphviz
GitHub: gorph
👉 @GolangPortal
GitHub: gorph
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Две структуры с одинаковыми полями могут иметь разный размер
Это явление называется «выравнивание» (alignment), концепция, заимствованная из C++, но применимая и в Go.
Посмотрим на пример
У структур A и B одинаковые поля; простая перестановка их порядка делает структуру A вдвое больше. Размер A возрастает до 32 байт, тогда как структура B остаётся меньше - 16 байт.
Подробнее об этом можно прочитать в этой статье:
Struct Optimization — A Small Change
👉 @GolangPortal
Это явление называется «выравнивание» (alignment), концепция, заимствованная из C++, но применимая и в Go.
Посмотрим на пример
У структур A и B одинаковые поля; простая перестановка их порядка делает структуру A вдвое больше. Размер A возрастает до 32 байт, тогда как структура B остаётся меньше - 16 байт.
Подробнее об этом можно прочитать в этой статье:
Struct Optimization — A Small Change
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤4🔥4
Вышли Go 1.25.2 и Go 1.24.8
Анонс: https://groups.google.com/g/golang-announce/c/4Emdl2iQ_bI/m/qZN5nc-mBgAJ
Скачать: https://go.dev/dl/#go1.25.2
👉 @GolangPortal
Анонс: https://groups.google.com/g/golang-announce/c/4Emdl2iQ_bI/m/qZN5nc-mBgAJ
Скачать: https://go.dev/dl/#go1.25.2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2
Визуализатор и отладчик HTTP-запросов на чистом Go, не требующий конфигурации, для локальной веб-разработки на Go
GitHub: govisual
👉 @GolangPortal
GitHub: govisual
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4
Объяснение Go maps: как на самом деле хранятся пары ключ-значение
Годный лонгрид от Phuong Le, который на простых иллюстрациях объясняет не самые простые аспекты Go. Этот гайд посвящен типу map и всему, что с ним связано.
🔹 Читать
👉 @GolangPortal
Годный лонгрид от Phuong Le, который на простых иллюстрациях объясняет не самые простые аспекты Go. Этот гайд посвящен типу map и всему, что с ним связано.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
4 распространённые стратегии вытеснения кэша
Память стоит дорого, так что как выбрать, какой элемент удалить, когда кэш заполнен?
🔹 Least Recently Used (LRU): классический вариант. Удаляется элемент, который не использовался дольше всего. Так кэш хранит самые «свежие» данные, к которым недавно был доступ.
🔹 Time-aware Least Recently Used (TLRU): похож на LRU, но с учётом времени жизни элементов. Удаляются старые и давно неиспользуемые данные, чтобы кэш оставался актуальным.
🔹 Least Frequently Used (LFU): считает, как часто используется каждый элемент. Удаляет тот, который используется реже всего, оставляя в кэше наиболее востребованные данные.
🔹 Most Recently Used (MRU): противоположный подход - удаляется элемент, использованный последним, предполагая, что он в ближайшее время больше не понадобится.
Представьте, что у вас плейлист из 100 песен: если кэшировать только последнюю проигранную песню (используя LRU), будут проблемы. Почему?
Потому что к первой песне вы вернётесь только после того, как проиграете остальные 99.
Исходя из стратегий выше, что бы вы выбрали для такого сценария?
👉 @GolangPortal
Память стоит дорого, так что как выбрать, какой элемент удалить, когда кэш заполнен?
Представьте, что у вас плейлист из 100 песен: если кэшировать только последнюю проигранную песню (используя LRU), будут проблемы. Почему?
Потому что к первой песне вы вернётесь только после того, как проиграете остальные 99.
Исходя из стратегий выше, что бы вы выбрали для такого сценария?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5🔥2
Корректное завершение работы приложения
Когда мы говорим о graceful shutdown (корректном завершении приложения), важно обеспечить несколько ключевых вещей:
- Нет новых запросов: сервер прекращает принимать новые запросы.
- Завершение текущих задач: ждём, пока выполняющиеся задачи дойдут до логической точки остановки
- Очистка ресурсов: освобождаем такие ресурсы, как соединения с базой данных, открытые файлы, сетевые подключения и т.д.
Существует несколько способов реализации, но я постараюсь дать самый короткий ради простоты: сначала создаём контекст (в main), который отменяется при получении сигнала прерывания (Ctrl+C) или SIGTERM.
Затем запускаем две горутины, координируемые через
Go errgroup — You Haven’t Used Goroutines Until You’ve Used This).
🔹 Первая - простой запуск сервера, но помните:
🔹 Вторая интереснее: это место для нашего graceful cleanup. Эта горутина ждёт закрытия
Если ваш сервис работает в Kubernetes, не стоит сразу отрубать приём новых запросов после получения
Приложение не должно завершаться мгновенно, ему нужно дождаться завершения всех активных запросов и продолжать слушать новые подключения, которые могут прийти во время процесса остановки Pod’а.
Kubernetes может потребоваться время, чтобы обновить все kube-proxies и балансировщики.
Это упрощённая версия, вы можете дополнительно: добавить таймаут в конфигурацию сервера, проверять, что ошибка closed, задать таймаут на shutdown и т.д.
👉 @GolangPortal
Когда мы говорим о graceful shutdown (корректном завершении приложения), важно обеспечить несколько ключевых вещей:
- Нет новых запросов: сервер прекращает принимать новые запросы.
- Завершение текущих задач: ждём, пока выполняющиеся задачи дойдут до логической точки остановки
- Очистка ресурсов: освобождаем такие ресурсы, как соединения с базой данных, открытые файлы, сетевые подключения и т.д.
Существует несколько способов реализации, но я постараюсь дать самый короткий ради простоты: сначала создаём контекст (в main), который отменяется при получении сигнала прерывания (Ctrl+C) или SIGTERM.
Затем запускаем две горутины, координируемые через
errgroup (если вы не знакомы с ней, посмотрите эту статью:Go errgroup — You Haven’t Used Goroutines Until You’ve Used This).
ListenAndServe всегда возвращает non-nil error.gCtx.Done(), которое прокидывается из нашего основного ctx.Если ваш сервис работает в Kubernetes, не стоит сразу отрубать приём новых запросов после получения
SIGTERM.Приложение не должно завершаться мгновенно, ему нужно дождаться завершения всех активных запросов и продолжать слушать новые подключения, которые могут прийти во время процесса остановки Pod’а.
Kubernetes может потребоваться время, чтобы обновить все kube-proxies и балансировщики.
Это упрощённая версия, вы можете дополнительно: добавить таймаут в конфигурацию сервера, проверять, что ошибка closed, задать таймаут на shutdown и т.д.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍5🔥4
Поздравляем, вы на 1 шаг ближе к работе мечты 🥳
Осталось только прочитать этот пост, подписаться на канал и откликнуться на вакансию 😉
Avito Career — место, где Авито делится актуальными вакансиями и стажировками для Go-разработчиков.
Подписывайтесь, чтобы найти ту самую работу ✨
Осталось только прочитать этот пост, подписаться на канал и откликнуться на вакансию 😉
Avito Career — место, где Авито делится актуальными вакансиями и стажировками для Go-разработчиков.
Подписывайтесь, чтобы найти ту самую работу ✨
👀1
Go sync.Cond — самый недооцененный механизм синхронизации: продолжение серии статей Phuong Le про сложные аспекты Go на простых иллюстрациях
Читаем здесь
👉 @GolangPortal
Читаем здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🌭1
Библиотека для мониторинга производительности Go-приложений, предоставляющая данные в реальном времени о метриках на уровне сервисов и отдельных функций
GitHub: monigo
👉 @GolangPortal
GitHub: monigo
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Изучаете, как вручную размещать Pod'ы в Kubernetes?
На платформе iximiuz Labs доступно задание, которое охватывает node selectors, правила affinity и taints.
Полезно, когда вам нужно контролировать размещение Pod'ов, например, для запуска рабочих нагрузок на узлах с GPU, изоляции сред или распределения трафика.
Если вы хотите освоить эти техники, это задание — отличный способ попрактиковаться.
Попробуйте здесь:
https://labs.iximiuz.com/challenges/kubernetes-pod-advanced-scheduling-3b631fdf
👉 @GolangPortal
На платформе iximiuz Labs доступно задание, которое охватывает node selectors, правила affinity и taints.
Полезно, когда вам нужно контролировать размещение Pod'ов, например, для запуска рабочих нагрузок на узлах с GPU, изоляции сред или распределения трафика.
Если вы хотите освоить эти техники, это задание — отличный способ попрактиковаться.
Попробуйте здесь:
https://labs.iximiuz.com/challenges/kubernetes-pod-advanced-scheduling-3b631fdf
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9
Опенсорсная альтернатива Vercel, Heroku и Netlify, с упрощёнными рабочими процессами
GitHub: nixopus
👉 @GolangPortal
GitHub: nixopus
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤3
Занимательная серия статей от Phuong Le про I/O в Go
Тема, с которой многие из нас регулярно работают, но не до конца понимают. Давайте разберёмся в этом:
▪️ Go I/O Readers, Writers и Data
▪️ Go I/O Closer, Seeker, WriterTo и ReaderFrom
👉 @GolangPortal
Тема, с которой многие из нас регулярно работают, но не до конца понимают. Давайте разберёмся в этом:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6
Высокопроизводительная библиотека для управления конфигурацией в Go-приложениях с нулевыми аллокациями, поддержкой универсальных форматов (JSON, YAML, TOML, HCL, INI, Properties) и сверхбыстрым CLI
GitHub: argus
👉 @GolangPortal
GitHub: argus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥4🤔1