Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
- Telegram Web
Telegram Web
Пошаговый разбор реверс-инжиниринга Golang! Задачу решаем тремя разными подходами: (1) статический анализ в IDA, (2) динамический анализ в дебаггере и (3) патчинг бинарника с переключением на нужный путь выполнения кода

Смотрите на YouTube

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53
Сети для самых маленьких

Это серия статей о сетях, их настройке и администрировании. Здесь собраны основные аспекты, которые необходимо знать и понимать. В этой серии рассматривается планирование сети, настройка маршрутизаторов, работа с коммутацией и маршрутизацией, протоколы и технологии: STP, NAT, VPN, BGP, MPLS и многое другое.

https://linkmeup.gitbook.io/sdsm

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74
Go-пакет synctest помогает контролировать время (в определённых пределах) при тестировании конкурентных программ.

Благодаря простому API, по сути единственной функции Wait, он позволяет убрать (почти) все вызовы time.Sleep в тестах.

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥54🤔1
Утилита на Go, которая без лишних усилий преобразует ваши текущие команды Cobra в инструменты MCP, а также предоставляет CLI-команды для интеграции с Claude и VSCode

GitHub: ophis

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3
Классная шпаргалка по 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
🚀 Ты — разработчик, но не до конца понимаешь, как твой код оказывается в проде?

Пора разобраться с новым курсом по 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
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍5🔥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
7🔥3👍2
Поздравляем, вы на 1 шаг ближе к работе мечты 🥳

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

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

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

Читаем здесь

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🌭1
2025/10/11 18:17:54
Back to Top
HTML Embed Code: