Объяснение 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
Кэш-френдли структуры данных в Go: ускорение в 10 раз без изменения алгоритма
Узнайте, как оптимизировать структуры данных на Go под современные архитектуры CPU. Мы разберём кэш-линии, ложное разделение и ориентированное на данные проектирование, чтобы добиться существенного прироста производительности в реальных приложениях.
https://skoredin.pro/blog/golang/cpu-cache-friendly-go
👉 @GolangPortal
Узнайте, как оптимизировать структуры данных на Go под современные архитектуры CPU. Мы разберём кэш-линии, ложное разделение и ориентированное на данные проектирование, чтобы добиться существенного прироста производительности в реальных приложениях.
https://skoredin.pro/blog/golang/cpu-cache-friendly-go
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤯2
This media is not supported in your browser
VIEW IN TELEGRAM
Знакомо чувство, когда читать про Go уже не хочется, а вот обсудить все, что волнует — да?
1 ноября в Москве пройдет Я.Субботник по Go от Яндекса — как раз то, что нужно. Митап, чтобы обсудить новые подходы, тренды, решения и вызовы индустрии.
В программе выступлений:
— Александр Никитин (старший разработчик бэкенда Яндекс Маркета): как с помощью Debug Tree удобно логировать и быстро находить баги в коде или дефекты в данных;
— Игорь Панасюк (разработчик бэкенда Плюса и Финтеха): как устроен garbage collector в Go 1.25, что изменилось и как это повлияет на ваши сервисы;
— Степан Пестерников (СТО Яндекс Игр): как используют KV-хранилища и кеши в Яндекс Играх, и др.
А еще нетворкинг в перерывах между докладами и круглые столы по темам от AI-инструментов до будущего языка.
Зарегистрироваться и познакомиться с программой можно тут.
1 ноября в Москве пройдет Я.Субботник по Go от Яндекса — как раз то, что нужно. Митап, чтобы обсудить новые подходы, тренды, решения и вызовы индустрии.
В программе выступлений:
— Александр Никитин (старший разработчик бэкенда Яндекс Маркета): как с помощью Debug Tree удобно логировать и быстро находить баги в коде или дефекты в данных;
— Игорь Панасюк (разработчик бэкенда Плюса и Финтеха): как устроен garbage collector в Go 1.25, что изменилось и как это повлияет на ваши сервисы;
— Степан Пестерников (СТО Яндекс Игр): как используют KV-хранилища и кеши в Яндекс Играх, и др.
А еще нетворкинг в перерывах между докладами и круглые столы по темам от AI-инструментов до будущего языка.
Зарегистрироваться и познакомиться с программой можно тут.
👍6❤3🔥2🤔2
Быстрая библиотека для извлечения данных из документов с поддержкой нескольких форматов для Go. Включает потоковый API для работы с крупными файлами и OCR для сканированных документов через Tesseract
GitHub: extractous-go
👉 @GolangPortal
GitHub: extractous-go
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥2🤔1
Собери свою собственную базу данных. Пошаговое руководство по созданию key-value базы данных с нуля
https://www.nan.fyi/database
👉 @GolangPortal
https://www.nan.fyi/database
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
Самостоятельно развёртываемый WAF (Web Application Firewall) на Go, выполняющий роль reverse-proxy для защиты ваших веб-приложений от атак и эксплуатации уязвимостей.
GitHub: SafeLine
👉 @GolangPortal
GitHub: SafeLine
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Долговечное фоновое выполнение с Go и SQLite
Статья рассказывает о том, как с помощью Watermill и SQLite можно построить фоновое выполнение задач в Go-приложении так, чтобы оно было долговечно устойчивым, то есть сохраняло корректность результата даже при сбоях системы, прерываниях выполнения и отказах инфраструктуры
Читайте здесь
👉 @GolangPortal
Статья рассказывает о том, как с помощью Watermill и SQLite можно построить фоновое выполнение задач в Go-приложении так, чтобы оно было долговечно устойчивым, то есть сохраняло корректность результата даже при сбоях системы, прерываниях выполнения и отказах инфраструктуры
Читайте здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Дженерики в Go: Ваш дружелюбный гид по повторно используемому коду
В этом гайде рассказывается, что такое дженерики, как их использовать и зачем они нужны
👉 Читать
👉 @GolangPortal
В этом гайде рассказывается, что такое дженерики, как их использовать и зачем они нужны
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3
Быстрое опенсорс приложение для ведения заметок в Markdown для студентов и креаторов, с бэкендом на Go
GitHub: Alexandrie
👉 @GolangPortal
GitHub: Alexandrie
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🤔1🌚1
От 19 часов до менее секунды: создание сверхбыстрого TCP-сканера на Go
Статья о том, как команда переписала свой сканер сети с обычного TCP-connect метода на «half-open» SYN-сканирование на языке и добилась сокращения времени проверки сети из 19 часов до менее чем одной секунды
Читайте здесь
👉 @GolangPortal
Статья о том, как команда переписала свой сканер сети с обычного TCP-connect метода на «half-open» SYN-сканирование на языке и добилась сокращения времени проверки сети из 19 часов до менее чем одной секунды
Читайте здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3