Пошаговый разбор реверс-инжиниринга Golang! Задачу решаем тремя разными подходами: (1) статический анализ в IDA, (2) динамический анализ в дебаггере и (3) патчинг бинарника с переключением на нужный путь выполнения кода
Смотрите на YouTube
👉 @GolangPortal
Смотрите на YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3
Сети для самых маленьких
Это серия статей о сетях, их настройке и администрировании. Здесь собраны основные аспекты, которые необходимо знать и понимать. В этой серии рассматривается планирование сети, настройка маршрутизаторов, работа с коммутацией и маршрутизацией, протоколы и технологии: STP, NAT, VPN, BGP, MPLS и многое другое.
https://linkmeup.gitbook.io/sdsm
👉 @GolangPortal
Это серия статей о сетях, их настройке и администрировании. Здесь собраны основные аспекты, которые необходимо знать и понимать. В этой серии рассматривается планирование сети, настройка маршрутизаторов, работа с коммутацией и маршрутизацией, протоколы и технологии: STP, NAT, VPN, BGP, MPLS и многое другое.
https://linkmeup.gitbook.io/sdsm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4
Go-пакет
Благодаря простому API, по сути единственной функции
👉 @GolangPortal
synctest
помогает контролировать время (в определённых пределах) при тестировании конкурентных программ. Благодаря простому API, по сути единственной функции
Wait
, он позволяет убрать (почти) все вызовы time.Sleep
в тестах.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤4🤔1
Утилита на Go, которая без лишних усилий преобразует ваши текущие команды Cobra в инструменты MCP, а также предоставляет CLI-команды для интеграции с Claude и VSCode
GitHub: ophis
👉 @GolangPortal
GitHub: ophis
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3
Архитектурный паттерн для централизованной обработки ошибок в хендлерах на 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
🚀 Ты — разработчик, но не до конца понимаешь, как твой код оказывается в проде?
Пора разобраться с новым курсом по GitLab CI на Stepik!
От теории и концепций до рабочих пайплайнов со сборкой, тестами, линтингом, временными отчетами и деплоем нейросети DeepSeek!
📝 50+ уроков, реальные примеры, минимум теории.
👨💻 60+ учащихся уже записаны на курс.
🎁 Для подписчиков канала — промокод CICD15 (скидка 15%).
👉 Открыть курс на Stepik
Пора разобраться с новым курсом по GitLab CI на Stepik!
От теории и концепций до рабочих пайплайнов со сборкой, тестами, линтингом, временными отчетами и деплоем нейросети DeepSeek!
📝 50+ уроков, реальные примеры, минимум теории.
👨💻 60+ учащихся уже записаны на курс.
🎁 Для подписчиков канала — промокод CICD15 (скидка 15%).
👉 Открыть курс на Stepik
👍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
❤5👍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
❤7🔥3👍2
Поздравляем, вы на 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
👍6❤2🌭1