Golang Portal
7.89K subscribers
403 photos
26 videos
7 files
438 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Golang-разработчика

Связь: @devmangx
Download Telegram
Классная шпаргалка по cron в Linux с примерами

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍131🤯1
Архитектурный паттерн для централизованной обработки ошибок в хендлерах на Go

Статья предлагает архитектурный паттерн для централизованной обработки ошибок в HTTP-хендлерах на Go: вводится кастомный тип HTTPError и обёртка (middleware), которая перехватывает ошибки, логирует их и унифицированно формирует HTTP-ответы

Читайте здесь

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🤔1🌚1
Запуск и управление контейнерами Docker

Изучите, как запускать контейнеры самых разных типов (серверы, базы данных, CLI-инструменты и т.д.), взаимодействовать с ними и сформировать чёткое понимание того, как Docker управляет вашими приложениями «под капотом».

Здесь: Docker 101: Run and Manage Containers

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53
Инструмент визуализации инфраструктуры на Go, который преобразует YAML-определения в диаграммы Graphviz

GitHub: gorph

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍114🔥4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
Визуализатор и отладчик HTTP-запросов на чистом Go, не требующий конфигурации, для локальной веб-разработки на Go

GitHub: govisual

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84
Объяснение Go maps: как на самом деле хранятся пары ключ-значение

Годный лонгрид от Phuong Le, который на простых иллюстрациях объясняет не самые простые аспекты Go. Этот гайд посвящен типу map и всему, что с ним связано.

🔹 Читать

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍65🔥2
Корректное завершение работы приложения

Когда мы говорим о graceful shutdown (корректном завершении приложения), важно обеспечить несколько ключевых вещей:

- Нет новых запросов: сервер прекращает принимать новые запросы.

- Завершение текущих задач: ждём, пока выполняющиеся задачи дойдут до логической точки остановки

- Очистка ресурсов: освобождаем такие ресурсы, как соединения с базой данных, открытые файлы, сетевые подключения и т.д.

Существует несколько способов реализации, но я постараюсь дать самый короткий ради простоты: сначала создаём контекст (в main), который отменяется при получении сигнала прерывания (Ctrl+C) или SIGTERM.

Затем запускаем две горутины, координируемые через errgroup (если вы не знакомы с ней, посмотрите эту статью:
Go errgroup — You Haven’t Used Goroutines Until You’ve Used This).

🔹Первая - простой запуск сервера, но помните: ListenAndServe всегда возвращает non-nil error.

🔹Вторая интереснее: это место для нашего graceful cleanup. Эта горутина ждёт закрытия gCtx.Done(), которое прокидывается из нашего основного ctx.

Если ваш сервис работает в Kubernetes, не стоит сразу отрубать приём новых запросов после получения SIGTERM.

Приложение не должно завершаться мгновенно, ему нужно дождаться завершения всех активных запросов и продолжать слушать новые подключения, которые могут прийти во время процесса остановки Pod’а.

Kubernetes может потребоваться время, чтобы обновить все kube-proxies и балансировщики.

Это упрощённая версия, вы можете дополнительно: добавить таймаут в конфигурацию сервера, проверять, что ошибка closed, задать таймаут на shutdown и т.д.

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍5🔥4
Поздравляем, вы на 1 шаг ближе к работе мечты 🥳

Осталось только прочитать этот пост, подписаться на канал и откликнуться на вакансию 😉

Avito Career — место, где Авито делится актуальными вакансиями и стажировками для Go-разработчиков.

Подписывайтесь, чтобы найти ту самую работу
👀1
Go sync.Cond — самый недооцененный механизм синхронизации: продолжение серии статей Phuong Le про сложные аспекты Go на простых иллюстрациях

Читаем здесь

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🌭1
Библиотека для мониторинга производительности Go-приложений, предоставляющая данные в реальном времени о метриках на уровне сервисов и отдельных функций

GitHub: monigo

👉 @GolangPortal
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
Please open Telegram to view this post
VIEW IN TELEGRAM
9
Опенсорсная альтернатива Vercel, Heroku и Netlify, с упрощёнными рабочими процессами

GitHub: nixopus

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63
Занимательная серия статей от 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
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥4🤔1