🔍 Ищете способ погрузиться в мир разработки на Go? Хотите создать свой первый мессенджер с использованием брокера сообщений NATS?
🗓 На открытом вебинаре 29 апреля в 20:00 мск вы научитесь работать с NATS — брокером сообщений, который идеально подходит для построения масштабируемых и высокопроизводительных приложений. Мы разберем все необходимые шаги, начиная от создания простого чат-радио до работы с многопоточностью и каналами в Go.
👩🎓 Вы освоите ключевые навыки работы с потоками ввода/вывода, научитесь строить многопоточный код на Go.
➡️ Зарегистрируйтесь и получите скидку на обучение «Go (Golang) Developer Basic»: https://vk.cc/cL4UpB
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Pragmatic
Недавно я открыл pull request, в котором просто обновил
> Почему ты обновляешь
Хороший вопрос. Короткий ответ: потому что это имеет значение.
Длинный ответ...
Что делает
Он обновляет:
-
- удаляет неиспользуемые зависимости;
- добавляет недостающие;
- обновляет версии
-
- добавляет хэши для новых зависимостей;
- удаляет хэши для неиспользуемых.
Что делает
То же самое, но моделируя, как если бы у вас был Go 1.xx. Это может быть полезно, если вы используете более старую версию Go, но хотите подготовить модуль к сборке на более новой версии, или наоборот.
Почему я обновляю
Есть несколько причин.
Обновление версии Go
Когда я обновляю
Поддержание актуальности зависимостей
Иногда
Удаление лишнего
Если вы удалили использование какого-либо пакета, но не запускали
Минимизация различий
Чем чаще вы запускаете
Безопасность
Иногда обновление зависимости может подтянуть фиксы для уязвимостей. Даже если вы не используете уязвимый код напрямую, он может быть в
TL;DR
-
-
- Обновление
https://carlosbecker.com/posts/pragmatic-gomod-bump/
👉 @golang_lib
go.mod
bumpНедавно я открыл pull request, в котором просто обновил
go.mod
, и мне задали интересный вопрос:> Почему ты обновляешь
go.mod
, если он и так работает?Хороший вопрос. Короткий ответ: потому что это имеет значение.
Длинный ответ...
Что делает
go mod tidy
?Он обновляет:
-
go.mod
:- удаляет неиспользуемые зависимости;
- добавляет недостающие;
- обновляет версии
go
, toolchain
, require
и replace
, если это необходимо.-
go.sum
:- добавляет хэши для новых зависимостей;
- удаляет хэши для неиспользуемых.
Что делает
go mod tidy -go=1.xx
?То же самое, но моделируя, как если бы у вас был Go 1.xx. Это может быть полезно, если вы используете более старую версию Go, но хотите подготовить модуль к сборке на более новой версии, или наоборот.
Почему я обновляю
go.mod
?Есть несколько причин.
Обновление версии Go
Когда я обновляю
go
, я также обновляю go.mod
. Это позволяет понять, с какой версией Go должен работать проект. Это особенно важно для CI/CD и будущих участников команды.Поддержание актуальности зависимостей
Иногда
go mod tidy
может подтянуть более свежую версию зависимости, особенно если у вас были временные изменения или вы что-то откатывали. Это помогает избежать накопления "грязи" в go.mod
.Удаление лишнего
Если вы удалили использование какого-либо пакета, но не запускали
tidy
, зависимость может остаться в go.mod
и go.sum
. Это лишний шум.Минимизация различий
Чем чаще вы запускаете
tidy
, тем меньше изменений накапливается, а значит, легче делать ревью и откаты при необходимости.Безопасность
Иногда обновление зависимости может подтянуть фиксы для уязвимостей. Даже если вы не используете уязвимый код напрямую, он может быть в
go.sum
.TL;DR
-
go.mod
и go.sum
— это часть исходного кода, и за ними нужно ухаживать.-
go mod tidy
помогает держать их в порядке.- Обновление
go.mod
даже без изменения логики — это хорошая практика.https://carlosbecker.com/posts/pragmatic-gomod-bump/
👉 @golang_lib
Реальное время для логирования диагностики или как по-настоящему следить за вашими Go веб-приложениями
Логирование часто рассматривают как пассивный процесс: что-то записывается в файл, а вы потом когда-нибудь это прочтёте. Но иногда вам нужно видеть, что происходит прямо сейчас.
Рассматриваем, как можно настроить в Go веб-приложении потоковое диагностическое логирование в реальном времени без особых накладных расходов.
Идея простая: вы создаёте отдельный HTTP-эндпоинт, который отправляет новые логи по WebSocket-соединению клиенту. Таким образом, вы можете открыть специальную страницу в браузере и наблюдать за логами в реальном времени, как будто это встроенный "tail -f" прямо в ваше приложение.
В статье описывается:
- Как настроить логгер на основе стандартного
- Как использовать
- Как обрабатывать несколько клиентов;
- Как фильтровать события логирования по уровню;
- Как сделать базовую аутентификацию для безопасного доступа к логам.
Это решение особенно полезно для отладки в staging-средах или для временного мониторинга продакшн-серверов, когда нужно быстро понять, что происходит.
Полный код решения можно интегрировать в существующее приложение буквально за несколько файлов, а настроить всего за пару часов.
https://evilmartians.com/chronicles/realtime-diagnostic-logging-or-how-to-really-spy-on-your-go-web-apps
👉 @golang_lib
Логирование часто рассматривают как пассивный процесс: что-то записывается в файл, а вы потом когда-нибудь это прочтёте. Но иногда вам нужно видеть, что происходит прямо сейчас.
Рассматриваем, как можно настроить в Go веб-приложении потоковое диагностическое логирование в реальном времени без особых накладных расходов.
Идея простая: вы создаёте отдельный HTTP-эндпоинт, который отправляет новые логи по WebSocket-соединению клиенту. Таким образом, вы можете открыть специальную страницу в браузере и наблюдать за логами в реальном времени, как будто это встроенный "tail -f" прямо в ваше приложение.
В статье описывается:
- Как настроить логгер на основе стандартного
log
пакета;- Как использовать
github.com/gorilla/websocket
для работы с WebSocket-соединением;- Как обрабатывать несколько клиентов;
- Как фильтровать события логирования по уровню;
- Как сделать базовую аутентификацию для безопасного доступа к логам.
Это решение особенно полезно для отладки в staging-средах или для временного мониторинга продакшн-серверов, когда нужно быстро понять, что происходит.
Полный код решения можно интегрировать в существующее приложение буквально за несколько файлов, а настроить всего за пару часов.
https://evilmartians.com/chronicles/realtime-diagnostic-logging-or-how-to-really-spy-on-your-go-web-apps
👉 @golang_lib
🚀 Подборка Telegram каналов для программистов
Системное администрирование, DevOps 📌
https://www.tgoop.com/bash_srv Bash Советы
https://www.tgoop.com/win_sysadmin Системный Администратор Windows
https://www.tgoop.com/sysadmin_girl Девочка Сисадмин
https://www.tgoop.com/srv_admin_linux Админские угодья
https://www.tgoop.com/linux_srv Типичный Сисадмин
https://www.tgoop.com/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://www.tgoop.com/linux_odmin Linux: Системный администратор
https://www.tgoop.com/devops_star DevOps Star (Звезда Девопса)
https://www.tgoop.com/i_linux Системный администратор
https://www.tgoop.com/linuxchmod Linux
https://www.tgoop.com/sys_adminos Системный Администратор
https://www.tgoop.com/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://www.tgoop.com/sysadminof Книги для админов, полезные материалы
https://www.tgoop.com/i_odmin Все для системного администратора
https://www.tgoop.com/i_odmin_book Библиотека Системного Администратора
https://www.tgoop.com/i_odmin_chat Чат системных администраторов
https://www.tgoop.com/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://www.tgoop.com/sysadminoff Новости Линукс Linux
1C разработка 📌
https://www.tgoop.com/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://www.tgoop.com/DevLab1C 1С:Предприятие 8
https://www.tgoop.com/razrab_1C 1C Разработчик
https://www.tgoop.com/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://www.tgoop.com/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://www.tgoop.com/cpp_lib Библиотека C/C++ разработчика
https://www.tgoop.com/cpp_knigi Книги для программистов C/C++
https://www.tgoop.com/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://www.tgoop.com/pythonofff Python академия.
https://www.tgoop.com/BookPython Библиотека Python разработчика
https://www.tgoop.com/python_real Python подборки на русском и английском
https://www.tgoop.com/python_360 Книги по Python
Java разработка 📌
https://www.tgoop.com/BookJava Библиотека Java разработчика
https://www.tgoop.com/java_360 Книги по Java Rus
https://www.tgoop.com/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://www.tgoop.com/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://www.tgoop.com/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://www.tgoop.com/developer_mobila Мобильная разработка
https://www.tgoop.com/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://www.tgoop.com/frontend_1 Подборки для frontend разработчиков
https://www.tgoop.com/frontend_sovet Frontend советы, примеры и практика!
https://www.tgoop.com/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://www.tgoop.com/game_devv Все о разработке игр
Библиотеки 📌
https://www.tgoop.com/book_for_dev Книги для программистов Rus
https://www.tgoop.com/programmist_of Книги по программированию
https://www.tgoop.com/proglb Библиотека программиста
https://www.tgoop.com/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://www.tgoop.com/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://www.tgoop.com/bookflow Лекции, видеоуроки, доклады с IT конференций
https://www.tgoop.com/rust_lib Полезный контент по программированию на Rust
https://www.tgoop.com/golang_lib Библиотека Go (Golang) разработчика
https://www.tgoop.com/itmozg Программисты, дизайнеры, новости из мира IT
https://www.tgoop.com/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://www.tgoop.com/nodejs_lib Подборки по Node js и все что с ним связано
https://www.tgoop.com/ruby_lib Библиотека Ruby программиста
https://www.tgoop.com/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://www.tgoop.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://www.tgoop.com/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://www.tgoop.com/thehaking Канал о кибербезопасности
https://www.tgoop.com/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://www.tgoop.com/ux_web Статьи, книги для дизайнеров
Математика 📌
https://www.tgoop.com/Pomatematike Канал по математике
https://www.tgoop.com/phis_mat Обучающие видео, книги по Физике и Математике
https://www.tgoop.com/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://www.tgoop.com/Excel_lifehack
https://www.tgoop.com/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://www.tgoop.com/sysadmin_rabota Системный Администратор
https://www.tgoop.com/progjob Вакансии в IT
Системное администрирование, DevOps 📌
https://www.tgoop.com/bash_srv Bash Советы
https://www.tgoop.com/win_sysadmin Системный Администратор Windows
https://www.tgoop.com/sysadmin_girl Девочка Сисадмин
https://www.tgoop.com/srv_admin_linux Админские угодья
https://www.tgoop.com/linux_srv Типичный Сисадмин
https://www.tgoop.com/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://www.tgoop.com/linux_odmin Linux: Системный администратор
https://www.tgoop.com/devops_star DevOps Star (Звезда Девопса)
https://www.tgoop.com/i_linux Системный администратор
https://www.tgoop.com/linuxchmod Linux
https://www.tgoop.com/sys_adminos Системный Администратор
https://www.tgoop.com/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://www.tgoop.com/sysadminof Книги для админов, полезные материалы
https://www.tgoop.com/i_odmin Все для системного администратора
https://www.tgoop.com/i_odmin_book Библиотека Системного Администратора
https://www.tgoop.com/i_odmin_chat Чат системных администраторов
https://www.tgoop.com/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://www.tgoop.com/sysadminoff Новости Линукс Linux
1C разработка 📌
https://www.tgoop.com/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://www.tgoop.com/DevLab1C 1С:Предприятие 8
https://www.tgoop.com/razrab_1C 1C Разработчик
https://www.tgoop.com/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://www.tgoop.com/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://www.tgoop.com/cpp_lib Библиотека C/C++ разработчика
https://www.tgoop.com/cpp_knigi Книги для программистов C/C++
https://www.tgoop.com/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://www.tgoop.com/pythonofff Python академия.
https://www.tgoop.com/BookPython Библиотека Python разработчика
https://www.tgoop.com/python_real Python подборки на русском и английском
https://www.tgoop.com/python_360 Книги по Python
Java разработка 📌
https://www.tgoop.com/BookJava Библиотека Java разработчика
https://www.tgoop.com/java_360 Книги по Java Rus
https://www.tgoop.com/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://www.tgoop.com/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://www.tgoop.com/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://www.tgoop.com/developer_mobila Мобильная разработка
https://www.tgoop.com/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://www.tgoop.com/frontend_1 Подборки для frontend разработчиков
https://www.tgoop.com/frontend_sovet Frontend советы, примеры и практика!
https://www.tgoop.com/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://www.tgoop.com/game_devv Все о разработке игр
Библиотеки 📌
https://www.tgoop.com/book_for_dev Книги для программистов Rus
https://www.tgoop.com/programmist_of Книги по программированию
https://www.tgoop.com/proglb Библиотека программиста
https://www.tgoop.com/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://www.tgoop.com/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://www.tgoop.com/bookflow Лекции, видеоуроки, доклады с IT конференций
https://www.tgoop.com/rust_lib Полезный контент по программированию на Rust
https://www.tgoop.com/golang_lib Библиотека Go (Golang) разработчика
https://www.tgoop.com/itmozg Программисты, дизайнеры, новости из мира IT
https://www.tgoop.com/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://www.tgoop.com/nodejs_lib Подборки по Node js и все что с ним связано
https://www.tgoop.com/ruby_lib Библиотека Ruby программиста
https://www.tgoop.com/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://www.tgoop.com/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://www.tgoop.com/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://www.tgoop.com/thehaking Канал о кибербезопасности
https://www.tgoop.com/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://www.tgoop.com/ux_web Статьи, книги для дизайнеров
Математика 📌
https://www.tgoop.com/Pomatematike Канал по математике
https://www.tgoop.com/phis_mat Обучающие видео, книги по Физике и Математике
https://www.tgoop.com/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://www.tgoop.com/Excel_lifehack
https://www.tgoop.com/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://www.tgoop.com/sysadmin_rabota Системный Администратор
https://www.tgoop.com/progjob Вакансии в IT
Telegram
Bash Советы
🚀 Секреты и советы по Bash
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале.
🔹 Автоматизация, скрипты и оптимизация работы в Linux.
🔹 Стать мастером Bash легко – просто подпишись!
💻 Прокачивай терминал вместе с нами! 👇
SOLID в Go и щепотка паттернов
Как сказал бы волк из небезызвестного мультика: «SOLID? Шо, опять?»
Но наша сфера пополняется новыми кадрами, и для них это всё действительно впервые. Именно для них я и написал эту статью. Недавно мне пришлось объяснять принципы SOLID начинающему разработчику на примере Go, и я понял, что нет хорошего материала, который я мог бы ему рекомендовать. Точнее, нет материала, который объяснял бы эти принципы так, как я это себе представляю, максимально понятно. Часто объяснения SOLID сводятся к разбору каждого принципа отдельно. Однако, по моему мнению, настоящее понимание приходит, когда ты видишь, как реализация одного принципа в коде неизбежно приводит к применению второго и третьего.
https://habr.com/ru/companies/domclick/articles/816885/
👉 @golang_lib
Как сказал бы волк из небезызвестного мультика: «SOLID? Шо, опять?»
Но наша сфера пополняется новыми кадрами, и для них это всё действительно впервые. Именно для них я и написал эту статью. Недавно мне пришлось объяснять принципы SOLID начинающему разработчику на примере Go, и я понял, что нет хорошего материала, который я мог бы ему рекомендовать. Точнее, нет материала, который объяснял бы эти принципы так, как я это себе представляю, максимально понятно. Часто объяснения SOLID сводятся к разбору каждого принципа отдельно. Однако, по моему мнению, настоящее понимание приходит, когда ты видишь, как реализация одного принципа в коде неизбежно приводит к применению второго и третьего.
https://habr.com/ru/companies/domclick/articles/816885/
👉 @golang_lib
Как я отправил 500 миллионов HTTP-запросов менее чем за 24 часа
Недавно я решил поэкспериментировать с отправкой большого количества HTTP-запросов за короткое время. Мне было любопытно, насколько далеко можно зайти, не нарушая правил приличия — без DDoS, без кражи ресурсов, просто ради эксперимента. В результате мне удалось отправить 500 миллионов запросов менее чем за 24 часа. В этом посте я объясню, как я это сделал и какие технологии использовал.
Цели и ограничения
* Не нарушать закон и правила приличия
* Не навредить чужим сервисам
* Минимальные затраты
* Использовать только бесплатные или дешевые решения
https://www.moczadlo.com/2024/how-i-sent-500-million-http-requests-in-under-24h
👉 @golang_lib
Недавно я решил поэкспериментировать с отправкой большого количества HTTP-запросов за короткое время. Мне было любопытно, насколько далеко можно зайти, не нарушая правил приличия — без DDoS, без кражи ресурсов, просто ради эксперимента. В результате мне удалось отправить 500 миллионов запросов менее чем за 24 часа. В этом посте я объясню, как я это сделал и какие технологии использовал.
Цели и ограничения
* Не нарушать закон и правила приличия
* Не навредить чужим сервисам
* Минимальные затраты
* Использовать только бесплатные или дешевые решения
https://www.moczadlo.com/2024/how-i-sent-500-million-http-requests-in-under-24h
👉 @golang_lib
🤖 Хотите создать Telegram-бота с нуля на Go?
📅 13 мая в 20:00 МСК на открытом вебинаре мы разберем, как создать простого, но эффективного Telegram-бота для управления задачами, а также заложим правильную архитектуру для его дальнейшего расширения.
❗️Что разберем:
— Принципы разработки Telegram-ботов на Go.
— Архитектуру и структуры данных.
— Реализацию минимального набора функций для бота.
➡️ Открытый урок проходит в преддверие старта курса «Go (Golang) Developer Basic». Все участники получат скидку на обучение. Запишитесь прямо сейчас: https://vk.cc/cLEkuD
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
📅 13 мая в 20:00 МСК на открытом вебинаре мы разберем, как создать простого, но эффективного Telegram-бота для управления задачами, а также заложим правильную архитектуру для его дальнейшего расширения.
❗️Что разберем:
— Принципы разработки Telegram-ботов на Go.
— Архитектуру и структуры данных.
— Реализацию минимального набора функций для бота.
➡️ Открытый урок проходит в преддверие старта курса «Go (Golang) Developer Basic». Все участники получат скидку на обучение. Запишитесь прямо сейчас: https://vk.cc/cLEkuD
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔧 Локальное исправление зависимостей в Go
Иногда при разработке на Go возникает необходимость временно изменить внешний модуль — например, внести исправление, которое ещё не вмержили в основной репозиторий. Go предоставляет удобный механизм для этого.
🧩 Используем
В Go можно использовать директиву
Теперь при сборке Go будет использовать код из
Это особенно удобно, если вы:
* работаете над фиксом бага во внешнем пакете;
* тестируете pull request;
* занимаетесь временным форком библиотеки.
⚠️ Что важно помнить
1. Не коммитьте
Эти изменения локальны и не должны попадать в боевой код.
2.
Даже если вы обновите модуль через
3. Проверьте
После замены зависимостей могут измениться хэши в
🛠 Пример сценария
Вы нашли баг в
Затем в
Теперь
https://eli.thegreenplace.net/2024/locally-patching-dependencies-in-go/
👉 @golang_lib
Иногда при разработке на Go возникает необходимость временно изменить внешний модуль — например, внести исправление, которое ещё не вмержили в основной репозиторий. Go предоставляет удобный механизм для этого.
🧩 Используем
replace
в go.mod
В Go можно использовать директиву
replace
, чтобы указать локальный путь вместо внешней зависимости:
replace github.com/some/module => ../local-copy/module
Теперь при сборке Go будет использовать код из
../local-copy/module
вместо кода, загружаемого из Git.Это особенно удобно, если вы:
* работаете над фиксом бага во внешнем пакете;
* тестируете pull request;
* занимаетесь временным форком библиотеки.
⚠️ Что важно помнить
1. Не коммитьте
replace
в main
ветку!Эти изменения локальны и не должны попадать в боевой код.
2.
go get
не влияет на replace
Даже если вы обновите модуль через
go get
, replace
всё равно будет использовать локальный путь.3. Проверьте
go.sum
После замены зависимостей могут измениться хэши в
go.sum
. Это нормально, но стоит за этим следить.🛠 Пример сценария
Вы нашли баг в
github.com/example/lib
, клонировали его:
git clone https://github.com/example/lib ~/dev/lib-patched
Затем в
go.mod
вашего проекта:
replace github.com/example/lib => ~/dev/lib-patched
Теперь
go build
будет использовать вашу локальную версию.https://eli.thegreenplace.net/2024/locally-patching-dependencies-in-go/
👉 @golang_lib
Использование Profile-Guided Optimization (PGO) для ваших Go-приложений
Профилируемая оптимизация (PGO) — это мощный способ улучшить производительность вашего программного обеспечения с минимальными изменениями в коде. Начиная с Go 1.21, поддержка PGO встроена в компилятор Go, что позволяет разработчикам собирать и использовать профиль выполнения своего приложения, чтобы сгенерировать более производительный бинарник.
Как это работает?
PGO использует реальные данные о выполнении приложения (runtime profile), чтобы направить оптимизации компилятора. Это позволяет, например, более эффективно размещать горячие (часто используемые) функции и блоки кода, улучшая производительность CPU и уменьшая кэш-промахи.
Как начать?
1. Соберите профиль выполнения. Используйте
2. Скомпилируйте с использованием профиля. Передайте профиль компилятору с флагом
3. Измерьте результат. После повторной сборки вы получите бинарник, оптимизированный под реальные сценарии выполнения.
Результаты
По оценкам команды Go, использование PGO может дать прирост производительности от 2% до 20%, в зависимости от характера приложения. Это особенно полезно для серверных приложений с высокими требованиями к производительности.
Советы
* Снимайте профиль в наиболее репрезентативной среде — это поможет добиться наилучших результатов.
* Периодически обновляйте профиль, если поведение приложения или его нагрузка изменяются.
* Можно автоматизировать этот процесс в CI/CD.
https://cloud.google.com/blog/products/application-development/using-profile-guided-optimization-for-your-go-apps
👉 @golang_lib
Профилируемая оптимизация (PGO) — это мощный способ улучшить производительность вашего программного обеспечения с минимальными изменениями в коде. Начиная с Go 1.21, поддержка PGO встроена в компилятор Go, что позволяет разработчикам собирать и использовать профиль выполнения своего приложения, чтобы сгенерировать более производительный бинарник.
Как это работает?
PGO использует реальные данные о выполнении приложения (runtime profile), чтобы направить оптимизации компилятора. Это позволяет, например, более эффективно размещать горячие (часто используемые) функции и блоки кода, улучшая производительность CPU и уменьшая кэш-промахи.
Как начать?
1. Соберите профиль выполнения. Используйте
-cpuprofile
, pprof
или инструменты трассировки для сбора профиля вашего приложения в реальных условиях или нагрузочном тесте.2. Скомпилируйте с использованием профиля. Передайте профиль компилятору с флагом
-pgoprofile=your.pprof
при сборке:
go build -gcflags=all=-pgoprofile=your.pprof
3. Измерьте результат. После повторной сборки вы получите бинарник, оптимизированный под реальные сценарии выполнения.
Результаты
По оценкам команды Go, использование PGO может дать прирост производительности от 2% до 20%, в зависимости от характера приложения. Это особенно полезно для серверных приложений с высокими требованиями к производительности.
Советы
* Снимайте профиль в наиболее репрезентативной среде — это поможет добиться наилучших результатов.
* Периодически обновляйте профиль, если поведение приложения или его нагрузка изменяются.
* Можно автоматизировать этот процесс в CI/CD.
https://cloud.google.com/blog/products/application-development/using-profile-guided-optimization-for-your-go-apps
👉 @golang_lib
💻Как работать с каналами в Go и сделать ваш код конкурентным?
🔥На открытом уроке «Использование каналов в Go на практике» от OTUS вы погрузитесь в одну из самых мощных особенностей языка Golang. Эти инструменты позволяют эффективно управлять параллельными процессами — ключ к созданию высокопроизводительных приложений.
❗️Что вас ждёт:
— Обзор теории: как работают каналы в Go и зачем они нужны.
— Практические примеры применения каналов в реальных задачах.
— Разбор частых ошибок и подводных камней при работе с каналами.
📗Урок пройдет в преддверии старта курса «Golang Developer. Professional», и все участники получат скидку на обучение.
➡️Встречаемся 14 мая в 20:00 МСК, регистрация открыта: https://vk.cc/cLRaXm
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔥На открытом уроке «Использование каналов в Go на практике» от OTUS вы погрузитесь в одну из самых мощных особенностей языка Golang. Эти инструменты позволяют эффективно управлять параллельными процессами — ключ к созданию высокопроизводительных приложений.
❗️Что вас ждёт:
— Обзор теории: как работают каналы в Go и зачем они нужны.
— Практические примеры применения каналов в реальных задачах.
— Разбор частых ошибок и подводных камней при работе с каналами.
📗Урок пройдет в преддверии старта курса «Golang Developer. Professional», и все участники получат скидку на обучение.
➡️Встречаемся 14 мая в 20:00 МСК, регистрация открыта: https://vk.cc/cLRaXm
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Golang: bytes.Buffer изнутри
Работая с кодом на Go, любому специалисту приходилось сталкиваться со стандартным пакетом bytes . Внутри него лежит определение Buffer . Что же это такое?
Определение bytes.Buffer
Сам по себе bytes.Buffer является структурой.
https://habr.com/ru/articles/827550/
👉 @golang_lib
Работая с кодом на Go, любому специалисту приходилось сталкиваться со стандартным пакетом bytes . Внутри него лежит определение Buffer . Что же это такое?
Определение bytes.Buffer
Сам по себе bytes.Buffer является структурой.
type Buffer struct {
buf []byte // содержимое - это байты buf[off : len(buf)]
off int // читает по &buf[off], пишет по &buf[len(buf)]
lastRead readOp // последняя операция чтения, чтобы Unread* могло работать корректно
}
https://habr.com/ru/articles/827550/
👉 @golang_lib
SIMD Binary Search Tree
Этот проект представляет собой бинарное дерево поиска, реализованное с использованием SIMD-инструкций (SSE/AVX/AVX512).
Обычно бинарный поиск требует log₂(n) сравнений. Однако с SIMD можно сравнивать сразу несколько элементов за один проход, значительно снижая число итераций. Это приближает бинарный поиск к константному времени для малых массивов.
Особенности
* Однопроходный бинарный поиск с SIMD.
* Поддержка SSE, AVX2 и AVX512.
* Дерево хранится как массив (без указателей).
* Отложенная перестройка дерева (lazy rebuilding).
* Поддержка поиска и вставки.
* Поддержка произвольных типов через шаблоны C++.
* Совместимость с
Пример использования
Производительность
Проект демонстрирует прирост производительности по сравнению со стандартными алгоритмами STL при поиске в небольших отсортированных массивах, особенно на AVX512.
Структура
*
*
*
*
https://clement-jean.github.io/simd_binary_search_tree/
👉 @golang_lib
Этот проект представляет собой бинарное дерево поиска, реализованное с использованием SIMD-инструкций (SSE/AVX/AVX512).
Обычно бинарный поиск требует log₂(n) сравнений. Однако с SIMD можно сравнивать сразу несколько элементов за один проход, значительно снижая число итераций. Это приближает бинарный поиск к константному времени для малых массивов.
Особенности
* Однопроходный бинарный поиск с SIMD.
* Поддержка SSE, AVX2 и AVX512.
* Дерево хранится как массив (без указателей).
* Отложенная перестройка дерева (lazy rebuilding).
* Поддержка поиска и вставки.
* Поддержка произвольных типов через шаблоны C++.
* Совместимость с
std::lower_bound
/ std::upper_bound
.Пример использования
#include "simd_binary_search_tree.hpp"
simd_tree::Tree<int> tree;
tree.insert(10);
tree.insert(5);
tree.insert(15);
auto result = tree.lower_bound(9); // -> 10
Производительность
Проект демонстрирует прирост производительности по сравнению со стандартными алгоритмами STL при поиске в небольших отсортированных массивах, особенно на AVX512.
Структура
*
Tree<T>
— основной шаблонный класс.*
insert(T)
— вставка элемента.*
lower_bound(T)
— найти первое значение не меньше заданного.*
upper_bound(T)
— найти первое значение больше заданного.https://clement-jean.github.io/simd_binary_search_tree/
👉 @golang_lib
🗂 Работа с базами данных на Go: как писать эффективные запросы и миграции?
📅 22 мая в 20:00 МСК на открытом уроке мы разберем, как эффективно работать с БД в Go, создавать таблицы, использовать ОRМ и SQL-запросы, а также научимся делать миграции.
Что вы узнаете:
— Как организовать структуру БД для веб-приложений.
— Применение ОRМ и чистого SQL в Go.
— Как правильно настроить миграцию и работать с таблицами.
➡️ Открытый урок пройдет в преддверие старта курса «Go (Golang) Developer Basic». Все участники получат 🎁 скидку на обучение. Не упустите шанс развить свои навыки в Go: https://vk.cc/cM5jdg
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
📅 22 мая в 20:00 МСК на открытом уроке мы разберем, как эффективно работать с БД в Go, создавать таблицы, использовать ОRМ и SQL-запросы, а также научимся делать миграции.
Что вы узнаете:
— Как организовать структуру БД для веб-приложений.
— Применение ОRМ и чистого SQL в Go.
— Как правильно настроить миграцию и работать с таблицами.
➡️ Открытый урок пройдет в преддверие старта курса «Go (Golang) Developer Basic». Все участники получат 🎁 скидку на обучение. Не упустите шанс развить свои навыки в Go: https://vk.cc/cM5jdg
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Строки(strings) в Go
Строки — одна из самых часто используемых структур данных в любом языке программирования. И в Go они повсюду: от простых приветствий вроде "Hello, World!" до сложных парсеров, логгеров и сетевых протоколов. На первый взгляд, с ними всё просто: создал, склеил, обрезал — и пошёл дальше. Но как это часто бывает, под простотой скрываются тонкости, игнорирование которых может привести к ошибкам и снижению производительности.
Go предлагает мощные, но специфичные механизмы работы со строками. Они тесно связаны с понятиями Unicode, UTF-8, рун, неизменяемости и байтовых представлений. Понимание этих механизмов позволяет не только избежать типичных подводных камней, но и писать более эффективный код.
https://habr.com/ru/articles/911614/
👉 @golang_lib
Строки — одна из самых часто используемых структур данных в любом языке программирования. И в Go они повсюду: от простых приветствий вроде "Hello, World!" до сложных парсеров, логгеров и сетевых протоколов. На первый взгляд, с ними всё просто: создал, склеил, обрезал — и пошёл дальше. Но как это часто бывает, под простотой скрываются тонкости, игнорирование которых может привести к ошибкам и снижению производительности.
Go предлагает мощные, но специфичные механизмы работы со строками. Они тесно связаны с понятиями Unicode, UTF-8, рун, неизменяемости и байтовых представлений. Понимание этих механизмов позволяет не только избежать типичных подводных камней, но и писать более эффективный код.
https://habr.com/ru/articles/911614/
👉 @golang_lib
Работа с аренами: почти избавляемся от GC
Меня зовут Максим Горозий. Я тимлид в Т-Банке, работаю над нашей образовательной платформой, которая служит для разных направлений бизнеса. В ИТ больше 10 лет и успел поработать в двух GameDev-компаниях, где управление памятью занимало весомое время в оптимизации производительности кода. Люблю строить системы и взаимосвязи между ними, а также EdTech и преподавание, а еще больше — работать над инструментами обучения. Хотя начинал с C, я идеологический фанат Go, DDD и Agile.
«Оно тормозит» — классическая цитата разработчиков. Расскажу, как разобраться в причинах и научиться управлять памятью, медитируя над профайлингом, чтобы все работало быстро.
https://habr.com/ru/companies/oleg-bunin/articles/828972/
👉 @golang_lib
Меня зовут Максим Горозий. Я тимлид в Т-Банке, работаю над нашей образовательной платформой, которая служит для разных направлений бизнеса. В ИТ больше 10 лет и успел поработать в двух GameDev-компаниях, где управление памятью занимало весомое время в оптимизации производительности кода. Люблю строить системы и взаимосвязи между ними, а также EdTech и преподавание, а еще больше — работать над инструментами обучения. Хотя начинал с C, я идеологический фанат Go, DDD и Agile.
«Оно тормозит» — классическая цитата разработчиков. Расскажу, как разобраться в причинах и научиться управлять памятью, медитируя над профайлингом, чтобы все работало быстро.
https://habr.com/ru/companies/oleg-bunin/articles/828972/
👉 @golang_lib
🚀 Go — лучший старт для вашей карьеры в программировании.
🔎 Если вы хотите освоить один из самых востребованных языков разработки, не тратя времени на сложный синтаксис, Go — ваш идеальный выбор. Курс «Golang Developer. Basic» от OTUS — это возможность начать с нуля и научиться создавать эффективные приложения, веб-сервисы и системы.
❓Что вас ждёт:
— Легкость изучения и быстрая адаптация в Go.
— Применение best practices и реальных инструментов разработки.
— Основы разработки на Go и эффективное использование встроенных инструментов.
📖 Программа обновляется в соответствии с требованиями рынка. Диплом OTUS ценят ведущие IT-компании. Обучение ведут опытные преподаватели, работающие в реальных проектах.
😎 Старт курса — 29 мая.
🔴 Набор почти закрыт! Оставьте заявку и получите скидку на обучение: https://vk.cc/cMcnTS
Скидка 5% по промокоду: Go_05
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔎 Если вы хотите освоить один из самых востребованных языков разработки, не тратя времени на сложный синтаксис, Go — ваш идеальный выбор. Курс «Golang Developer. Basic» от OTUS — это возможность начать с нуля и научиться создавать эффективные приложения, веб-сервисы и системы.
❓Что вас ждёт:
— Легкость изучения и быстрая адаптация в Go.
— Применение best practices и реальных инструментов разработки.
— Основы разработки на Go и эффективное использование встроенных инструментов.
📖 Программа обновляется в соответствии с требованиями рынка. Диплом OTUS ценят ведущие IT-компании. Обучение ведут опытные преподаватели, работающие в реальных проектах.
😎 Старт курса — 29 мая.
🔴 Набор почти закрыт! Оставьте заявку и получите скидку на обучение: https://vk.cc/cMcnTS
Скидка 5% по промокоду: Go_05
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🚀 Go-профилирование как у профи!
🔍 Слишком медленно или жрёт кучу памяти? Эта статья расскажет, как:
1️⃣ Включить CPU- и heap-профилирование через
2️⃣ Анализировать
3️⃣ Оптимизировать парсинг и работу с данными: стриминг вместо загрузки всего в память, замена дорогих функций, упрощение структур
4️⃣ Профилировать живой сервер через
⚡ Результат: время работы сократилось с ~14 до ~7 секунд, память — с 1.7 ГБ до 57 МБ!
👉 Читай подробное пошаговое руководство
👉 @golang_lib
🔍 Слишком медленно или жрёт кучу памяти? Эта статья расскажет, как:
1️⃣ Включить CPU- и heap-профилирование через
runwww.tgoop.com/pprof
2️⃣ Анализировать
.prof`-файлы командой `go tool pprof
(topN, граф, list)3️⃣ Оптимизировать парсинг и работу с данными: стриминг вместо загрузки всего в память, замена дорогих функций, упрощение структур
4️⃣ Профилировать живой сервер через
net/http/pprof
и ловить hot-spots «на ходу»⚡ Результат: время работы сократилось с ~14 до ~7 секунд, память — с 1.7 ГБ до 57 МБ!
👉 Читай подробное пошаговое руководство
👉 @golang_lib
🚀 Открой для себя идеальный путь к лидерству с карьерным тестом от ОЭЗ «Алабуга»! 🌟
Мечтаете о карьере в крупной компании, где ваш потенциал раскроется на полную? Наш тест поможет вам определить вашу уникальную лидерскую роль. Может быть, именно вы станете тем лидером, который выведет команду на новый уровень?
После прохождения теста вы можете заполнить заявку и получить приглашение на эксклюзивную лидерскую программу. Участие в программе открывает реальные перспективы трудоустройства в ОЭЗ «Алабуга», предоставляя шанс начать путь к профессиональному признанию.
Сделайте первый шаг к своему будущему сегодня! Пройдите тест, подайте заявку и начните строить свою карьеру вместе с нами. 🎯
Мечтаете о карьере в крупной компании, где ваш потенциал раскроется на полную? Наш тест поможет вам определить вашу уникальную лидерскую роль. Может быть, именно вы станете тем лидером, который выведет команду на новый уровень?
После прохождения теста вы можете заполнить заявку и получить приглашение на эксклюзивную лидерскую программу. Участие в программе открывает реальные перспективы трудоустройства в ОЭЗ «Алабуга», предоставляя шанс начать путь к профессиональному признанию.
Сделайте первый шаг к своему будущему сегодня! Пройдите тест, подайте заявку и начните строить свою карьеру вместе с нами. 🎯