Generic Concurrency в Go
В этой статье я хочу поделиться мыслями и идеями, которые у меня накопились за время работы с дженериками в Go, и в частности о том, как шаблоны многозадачности могут стать более удобными и переиспользуемыми с помощью дженериков.
https://sergey.kamardin.org/ru/articles/generic-concurrency-in-go/
👉 @golang_lib
В этой статье я хочу поделиться мыслями и идеями, которые у меня накопились за время работы с дженериками в Go, и в частности о том, как шаблоны многозадачности могут стать более удобными и переиспользуемыми с помощью дженериков.
https://sergey.kamardin.org/ru/articles/generic-concurrency-in-go/
👉 @golang_lib
👍1
🌟 Хотите создать чат-бота? Выберите Golang! 🌟
11 декабря в 20:00 МСК приглашаем вас на открытый урок, где вы узнаете, как с помощью Go разработать собственного бота для мемов — от идеи до готового функционала!
Этот урок подойдёт как новичкам, так и опытным разработчикам, которые хотят освоить Go и добавить немного юмора в свои проекты. К концу занятия у вас будет работающий бот и практические знания!
🚀 Регистрируйтесь на вебинар прямо сейчас! Все участники получат скидку на курс «Go (Golang) Developer Basic»: https://vk.cc/cFPJvy
Не упустите возможность прокачать свои навыки и развлечься! 💻✨
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
11 декабря в 20:00 МСК приглашаем вас на открытый урок, где вы узнаете, как с помощью Go разработать собственного бота для мемов — от идеи до готового функционала!
Этот урок подойдёт как новичкам, так и опытным разработчикам, которые хотят освоить Go и добавить немного юмора в свои проекты. К концу занятия у вас будет работающий бот и практические знания!
🚀 Регистрируйтесь на вебинар прямо сейчас! Все участники получат скидку на курс «Go (Golang) Developer Basic»: https://vk.cc/cFPJvy
Не упустите возможность прокачать свои навыки и развлечься! 💻✨
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🤡1
Популярные ошибки в Golang и как их избежать
Go известен своей лаконичностью и простотой синтаксиса, но даже в нём есть множество подводных камней, с которыми можно столкнуться в работе. В этой статье я сделаю разбор распространённых ошибок с примерами и расскажу, как их можно избежать.
https://habr.com/ru/companies/avito/articles/813697/
👉 @golang_lib
Go известен своей лаконичностью и простотой синтаксиса, но даже в нём есть множество подводных камней, с которыми можно столкнуться в работе. В этой статье я сделаю разбор распространённых ошибок с примерами и расскажу, как их можно избежать.
https://habr.com/ru/companies/avito/articles/813697/
👉 @golang_lib
👍3
Media is too big
VIEW IN TELEGRAM
Как стать сеньором / Василий Романов (VK, Облако Mail ru)
Какой уровень Golang нужен сеньорам? Разберем, чем сеньор отличается от других грейдов и какие есть сеньор-антипаттерны. Поймем, что сеньоры бывают разные. И придем к выводу, что знать алгоритмы GC нашей гошечки нужно не каждому сеньору.
источник
👉 @golang_lib
Какой уровень Golang нужен сеньорам? Разберем, чем сеньор отличается от других грейдов и какие есть сеньор-антипаттерны. Поймем, что сеньоры бывают разные. И придем к выводу, что знать алгоритмы GC нашей гошечки нужно не каждому сеньору.
источник
👉 @golang_lib
👍1
🌟 Хочешь писать код, который решает конкурентные задачи без багов? Начни с каналов в Go. Разберём устройство и применение на практике.
🗓 Открытый урок уже 25 декабря! Не упусти шанс наконец-то сделать свой код лучше.
🔍 Освоишь лучшие практики и научишься избегать ошибок, которые разрушают продуктивность приложений.
👨💻 Вебинар для Golang-разработчиков — и новичков, и практиков. Регистрируйся, если не хочешь стоять на месте: https://vk.cc/cGc664
🗓 Открытый урок уже 25 декабря! Не упусти шанс наконец-то сделать свой код лучше.
🔍 Освоишь лучшие практики и научишься избегать ошибок, которые разрушают продуктивность приложений.
👨💻 Вебинар для Golang-разработчиков — и новичков, и практиков. Регистрируйся, если не хочешь стоять на месте: https://vk.cc/cGc664
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍1
Production Ready Go Concurrency
Параллелизм - это одна из тех вещей, в которых легко ошибиться, даже при наличии функций параллелизма в Go. Давайте рассмотрим, что следует учитывать при написании продакшена с использованием параллелизма.
Руководство разделено на три части, каждая из которых имеет свою цель. Сначала мы поговорим о "правилах большого пальца", которые обычно являются правильными. Вторая часть посвящена тому, что нужно использовать для написания параллельного кода. И наконец, мы расскажем о том, как написать собственные примитивы параллелизма.
Прежде чем мы начнем, я должен отметить, что у многих из этих рекомендаций есть условия, при которых они не являются лучшим выбором. Основными ситуациями будут производительность и прототипирование.
https://www.storj.io/blog/production-concurrency
👉 @golang_lib
Параллелизм - это одна из тех вещей, в которых легко ошибиться, даже при наличии функций параллелизма в Go. Давайте рассмотрим, что следует учитывать при написании продакшена с использованием параллелизма.
Руководство разделено на три части, каждая из которых имеет свою цель. Сначала мы поговорим о "правилах большого пальца", которые обычно являются правильными. Вторая часть посвящена тому, что нужно использовать для написания параллельного кода. И наконец, мы расскажем о том, как написать собственные примитивы параллелизма.
Прежде чем мы начнем, я должен отметить, что у многих из этих рекомендаций есть условия, при которых они не являются лучшим выбором. Основными ситуациями будут производительность и прототипирование.
https://www.storj.io/blog/production-concurrency
👉 @golang_lib
👍5
Как контейнеризировать приложение Golang с помощью Docker для разработки и производства
Вы хотите написать приложение на языке Golang, контейнеризированное с помощью Docker? Цель этой статьи - помочь вам быстро получить приложение Golang в контейнере для разработки (с горячей загрузкой) и для использования в продакшне.
https://bartlomiejmika.com/post/2022/how-to-containerize-a-golang-app-with-docker-for-development-and-production/
👉 @golang_lib
Вы хотите написать приложение на языке Golang, контейнеризированное с помощью Docker? Цель этой статьи - помочь вам быстро получить приложение Golang в контейнере для разработки (с горячей загрузкой) и для использования в продакшне.
https://bartlomiejmika.com/post/2022/how-to-containerize-a-golang-app-with-docker-for-development-and-production/
👉 @golang_lib
👍3👎2🤣1
Media is too big
VIEW IN TELEGRAM
Выжимаем из Go максимум производительности / Никита Галушко (VK, ВКонтакте)
Этот доклад о том, как писать код на Go так, чтобы выжимать максимум производительности.
Например, из него вы узнаете:
почему не все for-range-циклы равны между собой;
что такое small-size-объекты;
источник
👉 @golang_lib
Этот доклад о том, как писать код на Go так, чтобы выжимать максимум производительности.
Например, из него вы узнаете:
почему не все for-range-циклы равны между собой;
что такое small-size-объекты;
источник
👉 @golang_lib
👍4👎1
Вебинар: база данных на Go!
Присоединяйтесь к открытому вебинару «Взаимодействие с базой данных и миграции на Go».
Что вы узнаете:
- как создавать таблицы и структурировать базы данных;
- как разрабатывать базу для веб-приложений на Go;
- как работать с ОРМ и SQL-запросами.
Почему это важно: Golang — язык будущего. После вебинара вы сможете создавать и мигрировать базы данных, что станет вашим преимуществом в IT.
Действуйте!
Регистрируйтесь на вебинар и получите скидку на участие в большом курсе «Go (Golang) Developer Basic»: https://vk.cc/cHjjaB
Присоединяйтесь к открытому вебинару «Взаимодействие с базой данных и миграции на Go».
Что вы узнаете:
- как создавать таблицы и структурировать базы данных;
- как разрабатывать базу для веб-приложений на Go;
- как работать с ОРМ и SQL-запросами.
Почему это важно: Golang — язык будущего. После вебинара вы сможете создавать и мигрировать базы данных, что станет вашим преимуществом в IT.
Действуйте!
Регистрируйтесь на вебинар и получите скидку на участие в большом курсе «Go (Golang) Developer Basic»: https://vk.cc/cHjjaB
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Go в Domain Driven Design / Дмитрий Анисов (GS Labs)
Расскажу о необходимости DDD, о его плюсах и минусах, зачем стоит использовать данный подход в разработке и с какими трудностями мы столкнулись. Как проектировать внутреннюю архитектуру сервиса так, чтобы было удобно и эффективно работать с ним в будущем.
https://www.youtube.com/watch?v=JcsKI7QyDrs
👉 @golang_lib
Расскажу о необходимости DDD, о его плюсах и минусах, зачем стоит использовать данный подход в разработке и с какими трудностями мы столкнулись. Как проектировать внутреннюю архитектуру сервиса так, чтобы было удобно и эффективно работать с ним в будущем.
https://www.youtube.com/watch?v=JcsKI7QyDrs
👉 @golang_lib
YouTube
Go в Domain Driven Design / Дмитрий Анисов (GS Labs)
Приглашаем на Golang Conf X 2025, которая пройдет 4 июня 2025 в Москве.
Программа, подробности и билеты по ссылке https://bit.ly/4aJwiZ2
---------
Профессиональная конференция для Go-разработчиков
Презентация и тезисы:
https://golangconf.ru/2023/abstracts/11376…
Программа, подробности и билеты по ссылке https://bit.ly/4aJwiZ2
---------
Профессиональная конференция для Go-разработчиков
Презентация и тезисы:
https://golangconf.ru/2023/abstracts/11376…
👍1
📊 Визуализация покрытия кода в Go с помощью treemap
Если вы пишете на Go и хотите улучшить качество вашего кода, обратите внимание на инструмент go-cover-treemap. Это CLI-утилита, которая преобразует отчёты покрытия кода (coverage) в наглядные treemap-диаграммы. Она помогает визуально оценить, какие части вашего проекта хорошо тестируются, а где ещё есть пробелы.
Особенности:
- Генерация HTML-страниц с treemap для лучшей читаемости.
- Поддержка всех версий Go с встроенными инструментами покрытия.
- Простой в использовании и лёгкий в настройке.
https://github.com/nikolaydubina/go-cover-treemap
👉 @golang_lib
Если вы пишете на Go и хотите улучшить качество вашего кода, обратите внимание на инструмент go-cover-treemap. Это CLI-утилита, которая преобразует отчёты покрытия кода (coverage) в наглядные treemap-диаграммы. Она помогает визуально оценить, какие части вашего проекта хорошо тестируются, а где ещё есть пробелы.
Особенности:
- Генерация HTML-страниц с treemap для лучшей читаемости.
- Поддержка всех версий Go с встроенными инструментами покрытия.
- Простой в использовании и лёгкий в настройке.
$ go install github.com/nikolaydubina/go-cover-treemap@latest
$ go test -coverprofile cover.out ./...
$ go-cover-treemap -coverprofile cover.out > out.svg
https://github.com/nikolaydubina/go-cover-treemap
👉 @golang_lib
🔥2❤1
👀Как обнаруживать и правильно разрабатывать Cloud Native приложения, верно использовать функционал health-check-ов, а также внедрять и поддерживать их в Kubernetes?
Узнайте на бесплатном вебинаре онлайн-курса «Golang Developer. Professional» — «Кошелек или жизнь? Фича или баг? Хелсчеки в k8s»: регистрация
✅В результате вебинара участники узнают:
— Разницу между readiness и liveness probes
— Как настроить проверки на практике;
— Условия успешной работы health-check-ов
— Как настраивать probes для контейнеров в k8s.
🎯Вебинар будет полезен:
— Разработчикам на Go на уровнях Junior и Middle
— Специалистам, желающим улучшить свои навыки в Kubernetes
— Всем, кто стремится создавать надежные Cloud Native приложения.
🤝После вебинара продолжите обучение на курсе со скидкой и даже в рассрочку!
Узнайте на бесплатном вебинаре онлайн-курса «Golang Developer. Professional» — «Кошелек или жизнь? Фича или баг? Хелсчеки в k8s»: регистрация
✅В результате вебинара участники узнают:
— Разницу между readiness и liveness probes
— Как настроить проверки на практике;
— Условия успешной работы health-check-ов
— Как настраивать probes для контейнеров в k8s.
🎯Вебинар будет полезен:
— Разработчикам на Go на уровнях Junior и Middle
— Специалистам, желающим улучшить свои навыки в Kubernetes
— Всем, кто стремится создавать надежные Cloud Native приложения.
🤝После вебинара продолжите обучение на курсе со скидкой и даже в рассрочку!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍1🤣1
Не возвращайте err в Go
Статья объясняет особенности работы с ошибками в Go, предоставляя глубокий взгляд на их обработку и использование. Автор рассматривает эволюцию подходов к работе с ошибками в Go, начиная с базовых принципов и заканчивая более сложными реализациями, такими как обертки, форматирование и трассировка.
Ключевые моменты статьи:
- Объяснение базового подхода к обработке ошибок в Go через возвращаемые значения.
- Использование пакета
- Примеры использования
- Рассмотрение новых возможностей работы с ошибками в Go 1.13+, включая
- Подходы к логированию и диагностике, а также нюансы проектирования API.
https://akavel.com/go-errors
👉 @golang_lib
Статья объясняет особенности работы с ошибками в Go, предоставляя глубокий взгляд на их обработку и использование. Автор рассматривает эволюцию подходов к работе с ошибками в Go, начиная с базовых принципов и заканчивая более сложными реализациями, такими как обертки, форматирование и трассировка.
Ключевые моменты статьи:
- Объяснение базового подхода к обработке ошибок в Go через возвращаемые значения.
- Использование пакета
errors
для обертывания ошибок и добавления контекста. - Примеры использования
fmt.Errorf
с поддержкой обертывания ошибок. - Рассмотрение новых возможностей работы с ошибками в Go 1.13+, включая
errors.Is
и errors.As
. - Подходы к логированию и диагностике, а также нюансы проектирования API.
https://akavel.com/go-errors
👉 @golang_lib
👍8🔥2
Увеличение производительности Go-приложений с использованием оптимизации, основанной на профилировании
Благодаря профилированию Go-приложений во время выполнения, компилятор Go может принимать более эффективные решения об оптимизации в последующих сборках, что приводит к значительному улучшению производительности CPU. В рамках этой технической сессии разработчики узнают, как работает оптимизация, основанная на профилировании, и как они могут использовать её для повышения (и измерения) производительности своих приложений как в Google Cloud, так и за его пределами.
https://www.youtube.com/watch?v=FwzE5Sdhhdw
👉 @golang_lib
Благодаря профилированию Go-приложений во время выполнения, компилятор Go может принимать более эффективные решения об оптимизации в последующих сборках, что приводит к значительному улучшению производительности CPU. В рамках этой технической сессии разработчики узнают, как работает оптимизация, основанная на профилировании, и как они могут использовать её для повышения (и измерения) производительности своих приложений как в Google Cloud, так и за его пределами.
https://www.youtube.com/watch?v=FwzE5Sdhhdw
👉 @golang_lib
👍3
👩💻 Go в действии: подборка докладов для разработчиков на Go. Узнайте о создании инструментов для фаззинга, развертывании Kubernetes-кластеров с использованием Go и многом другом.
Подборка презентаций с руководствами по разработке кастомных решений, которые уже были успешно внедрены инженерами и разработчиками из YADRO, Avito Tech, Ozon Fintech и других технологических компаний в своих продуктах.
Если вашей команде требуется инструмент для фаззинга или обработки ошибок на Go, вы можете создать их, опираясь на примеры и кейсы, представленные специалистами в их выступлениях и материалах.
🔹 Внедряем фаззинг: какой инструмент вам подойдет / Иван Золотников, инженер в YADRO
🔹 Создаем замену buf: сеанс реверс-инжиниринга / Эдгар Сипки, разработчик в Ozon Fintech, и Василий Близнецов, разработчик в Positive Technologies
🔹 Доступно о паттернах, умных обработчиках и красивой синхронизации в Go / Олег Козырев, старший инженер в AvitoTech
🔹 Учим сервис сообщать понятно об ошибке пользователям, программистам и машинам / Александр Лырчиков, разработчик в команде систем хранения данных в YADRO
🔹 Пишем свой mini-k8s на Go с helm-шаблонизатором / Станислав Иванкевич, старший программист в команде разработки DataMasters в VK Tech
🔹 Снижаем нагрузку на Garbage Collector и ускоряем работу с памятью, используя sync.Pool / Александр Иванов, тимлид в команде телекома в в YADRO
👉 @golang_lib
Подборка презентаций с руководствами по разработке кастомных решений, которые уже были успешно внедрены инженерами и разработчиками из YADRO, Avito Tech, Ozon Fintech и других технологических компаний в своих продуктах.
Если вашей команде требуется инструмент для фаззинга или обработки ошибок на Go, вы можете создать их, опираясь на примеры и кейсы, представленные специалистами в их выступлениях и материалах.
🔹 Внедряем фаззинг: какой инструмент вам подойдет / Иван Золотников, инженер в YADRO
🔹 Создаем замену buf: сеанс реверс-инжиниринга / Эдгар Сипки, разработчик в Ozon Fintech, и Василий Близнецов, разработчик в Positive Technologies
🔹 Доступно о паттернах, умных обработчиках и красивой синхронизации в Go / Олег Козырев, старший инженер в AvitoTech
🔹 Учим сервис сообщать понятно об ошибке пользователям, программистам и машинам / Александр Лырчиков, разработчик в команде систем хранения данных в YADRO
🔹 Пишем свой mini-k8s на Go с helm-шаблонизатором / Станислав Иванкевич, старший программист в команде разработки DataMasters в VK Tech
🔹 Снижаем нагрузку на Garbage Collector и ускоряем работу с памятью, используя sync.Pool / Александр Иванов, тимлид в команде телекома в в YADRO
👉 @golang_lib
👍1🔥1
⭐️ Symfony и Kafka — союз, о котором мечтают разработчики!
👉 Узнайте, как интеграция Symfony Messenger с Kafka делает обработку асинхронных задач надёжной и масштабируемой. Мы разберём примеры, лучшие практики и подводные камни.
⏰ Хотите уверенно работать с этой мощной связкой и прокачать свои проекты? 28 января в 20:00 мск вас ждёт открытый урок, где мы расскажем, как настроить и использовать Kafka как транспорт.
Спикер Михаил Каморин — Dev Tech Lead в Skyeng, участник и организатор конференций по PHP, член ПК Podlodka PHP Crew.
👉 Регистрируйтесь на вебинар сейчас и получите скидку на обучение на курсе «Symfony Framework»: https://vk.cc/cHIjHZ
👉 Узнайте, как интеграция Symfony Messenger с Kafka делает обработку асинхронных задач надёжной и масштабируемой. Мы разберём примеры, лучшие практики и подводные камни.
⏰ Хотите уверенно работать с этой мощной связкой и прокачать свои проекты? 28 января в 20:00 мск вас ждёт открытый урок, где мы расскажем, как настроить и использовать Kafka как транспорт.
Спикер Михаил Каморин — Dev Tech Lead в Skyeng, участник и организатор конференций по PHP, член ПК Podlodka PHP Crew.
👉 Регистрируйтесь на вебинар сейчас и получите скидку на обучение на курсе «Symfony Framework»: https://vk.cc/cHIjHZ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🤡4🤮2💩2
Media is too big
VIEW IN TELEGRAM
Пишем gRPC сервис на Go - Сервис авторизации / УЛЬТИМАТИВНЫЙ гайд
- Напишем контракт protobuf, разберемся с кодогенерацией
- Научимся работать с ошибками и логами
- Настроим миграции для БД
- Настроим автоматический деплой через GitHub Actions, напишем для этого workflow
- и др.
00:00 Вступление
01:00 Мой Телеграм-канал, зачем на него подписываться
02:04 Теоретический ликбез
06:49 SSO или Auth?
07:58 Авторизация и аутентификация - в чем разница?
08:31 Архитектура авторизации в нашем сервисе
09:51 Что такое JWT и зачем он нужен?
14:01 Архитектура приложения
16:33 Protobuf контракт
31:24 Пишем SSO: каркас и структура проекта
38:03 Конфигурация приложения
52:32 Настраиваем логгер - log.slog
01:03:56 gRPC-сервер и хэндлеры
01:18:48 Запуск и проверка приложения
01:22:04 Graceful shutdown
01:27:08 Хэндлер Login()
01:34:28 Хэндлер Register()
01:36:01 Хэндлер IsAdmin()
01:36:53 Сервисный слой
01:46:27 Метод RegisterNewUser() и хэширование паролей
01:52:05 Метод Login() и сравнение хэшей паролей
01:58:00 Создание JWT-токена
02:04:45 Миграции базы данных
02:23:05 Слой работы с данными: реализация Storage
02:32:09 Собираем все компоненты воедино
02:37:11 Пишем функциональные тесты
03:05:22 Интеграция с другим сервисом: URL Shortener
03:15:05 Покупка облачного сервера для деплоя
03:19:16 GitHub Actions: настраиваем автоматический деплой
03:36:53 Тестируем задеплоенный сервис
03:41:23 Заключение
03:41:35 Наше сообщество - Gopher Club
03:43:16 Как поддержать развитие канала
Исходный код https://github.com/GolangLessons/sso/tree/guide-version
источник
👉 @golang_lib
- Напишем контракт protobuf, разберемся с кодогенерацией
- Научимся работать с ошибками и логами
- Настроим миграции для БД
- Настроим автоматический деплой через GitHub Actions, напишем для этого workflow
- и др.
00:00 Вступление
01:00 Мой Телеграм-канал, зачем на него подписываться
02:04 Теоретический ликбез
06:49 SSO или Auth?
07:58 Авторизация и аутентификация - в чем разница?
08:31 Архитектура авторизации в нашем сервисе
09:51 Что такое JWT и зачем он нужен?
14:01 Архитектура приложения
16:33 Protobuf контракт
31:24 Пишем SSO: каркас и структура проекта
38:03 Конфигурация приложения
52:32 Настраиваем логгер - log.slog
01:03:56 gRPC-сервер и хэндлеры
01:18:48 Запуск и проверка приложения
01:22:04 Graceful shutdown
01:27:08 Хэндлер Login()
01:34:28 Хэндлер Register()
01:36:01 Хэндлер IsAdmin()
01:36:53 Сервисный слой
01:46:27 Метод RegisterNewUser() и хэширование паролей
01:52:05 Метод Login() и сравнение хэшей паролей
01:58:00 Создание JWT-токена
02:04:45 Миграции базы данных
02:23:05 Слой работы с данными: реализация Storage
02:32:09 Собираем все компоненты воедино
02:37:11 Пишем функциональные тесты
03:05:22 Интеграция с другим сервисом: URL Shortener
03:15:05 Покупка облачного сервера для деплоя
03:19:16 GitHub Actions: настраиваем автоматический деплой
03:36:53 Тестируем задеплоенный сервис
03:41:23 Заключение
03:41:35 Наше сообщество - Gopher Club
03:43:16 Как поддержать развитие канала
Исходный код https://github.com/GolangLessons/sso/tree/guide-version
источник
👉 @golang_lib
🔥10👍2
Domain Driven Design в Go – это почти не больно
Как выглядят паттерны DDD (Domain Driven Design) в большом проекте? А самое главное, стоит ли их вообще использовать? Рассмотрим, какими инструментами можно реализовать DDD на Go и оценим, насколько это больно.
Меня зовут Илья Сергунин, я backend-сочинитель в Авито: занимаюсь тем, что передаю смартфоны в хорошие руки. В этой статье попытаюсь объяснить, как можно натянуть DDD на Go без синтаксического сахара и магии Java-подобных языков, и без больших крутых ORM c Data mapper, которые также отсутствуют в Go.
https://habr.com/ru/companies/oleg-bunin/articles/791420/
👉 @golang_lib
Как выглядят паттерны DDD (Domain Driven Design) в большом проекте? А самое главное, стоит ли их вообще использовать? Рассмотрим, какими инструментами можно реализовать DDD на Go и оценим, насколько это больно.
Меня зовут Илья Сергунин, я backend-сочинитель в Авито: занимаюсь тем, что передаю смартфоны в хорошие руки. В этой статье попытаюсь объяснить, как можно натянуть DDD на Go без синтаксического сахара и магии Java-подобных языков, и без больших крутых ORM c Data mapper, которые также отсутствуют в Go.
https://habr.com/ru/companies/oleg-bunin/articles/791420/
👉 @golang_lib
👍7
Media is too big
VIEW IN TELEGRAM
Секреты внутреннего устройства планировщика Go
Таймкоды:
00:00 - Введение
03:00 - Потоки операционной системы
07:34 - Легковесные потоки
10:16 - Основные концепции рантайма Go
15:21 - Шасштабирование рантайма Go
18:45 - Локальные очереди
21:45 - Work sharing и work stealing
26:08 - Syscalls в планировщике Go
27:41 - Handoff
34:50 - Netpoller
37:33 - Очереди в планировщике Go
42:28 - Примитивы синхронизации
48:57 - Циклы
52:27 - Курс по Concurrency в Go
источник
👉 @golang_lib
Таймкоды:
00:00 - Введение
03:00 - Потоки операционной системы
07:34 - Легковесные потоки
10:16 - Основные концепции рантайма Go
15:21 - Шасштабирование рантайма Go
18:45 - Локальные очереди
21:45 - Work sharing и work stealing
26:08 - Syscalls в планировщике Go
27:41 - Handoff
34:50 - Netpoller
37:33 - Очереди в планировщике Go
42:28 - Примитивы синхронизации
48:57 - Циклы
52:27 - Курс по Concurrency в Go
источник
👉 @golang_lib
👍5
Rill — это набор инструментов для языка Go, предназначенный для создания чистого, компонуемого и основанного на каналах параллелизма. Он упрощает разработку параллельных программ, позволяя строить их из простых и повторно используемых компонентов. Rill снижает объем шаблонного кода, сохраняя при этом естественную модель каналов Go.
Основные возможности Rill:
- Упрощение общих задач параллелизма: Предоставляет более чистый и безопасный способ решения распространенных проблем параллелизма, таких как параллельное выполнение задач или обработка событий в реальном времени. Устраняет необходимость в шаблонном коде и абстрагирует сложности управления горутинами, каналами и ошибками. При этом разработчики сохраняют полный контроль над уровнем параллелизма для всех операций.
- Компонентность и чистота кода: Большинство функций библиотеки принимают каналы Go в качестве входных данных и возвращают новые, преобразованные каналы в качестве выходных данных. Это позволяет объединять их различными способами для построения повторно используемых конвейеров из более простых частей, аналогично Unix-пайпам. В результате параллельные программы становятся последовательностями понятных и повторно используемых операций.
- Централизованная обработка ошибок: Ошибки автоматически распространяются через конвейер и могут быть обработаны в одном месте в конце. Для более сложных сценариев Rill также предоставляет инструменты для перехвата и обработки ошибок в любой точке конвейера.
- Упрощение обработки потоков: Благодаря каналам Go встроенные функции могут обрабатывать потенциально бесконечные потоки, обрабатывая элементы по мере их поступления. Это делает Rill удобным инструментом для обработки данных в реальном времени или работы с большими наборами данных, которые не помещаются в памяти.
- Решения для сложных задач: Библиотека включает готовые функции для пакетной обработки, упорядоченного объединения потоков, map-reduce, разделения потоков, слияния и многого другого. Конвейеры, хотя обычно линейные, могут иметь любую безцикловую топологию (DAG).
- Поддержка пользовательских расширений: Поскольку Rill работает на стандартных каналах Go, легко писать пользовательские функции, совместимые с библиотекой.
- Легковесность: Rill имеет небольшой, типобезопасный API, основанный на каналах, и не имеет зависимостей, что делает его простым для интеграции в существующие проекты. Он также экономно использует ресурсы, гарантируя, что количество выделений памяти и горутин не растет с увеличением размера входных данных.
Быстрый старт:
Рассмотрим практический пример: получение пользователей из API, их активация и сохранение изменений. Он демонстрирует, как контролировать параллелизм на каждом этапе, сохраняя код чистым и управляемым. Функция
Этот пример демонстрирует, как Rill упрощает построение параллельных конвейеров обработки данных, делая код более читаемым и поддерживаемым.
https://github.com/destel/rill
👉 @golang_lib
Основные возможности Rill:
- Упрощение общих задач параллелизма: Предоставляет более чистый и безопасный способ решения распространенных проблем параллелизма, таких как параллельное выполнение задач или обработка событий в реальном времени. Устраняет необходимость в шаблонном коде и абстрагирует сложности управления горутинами, каналами и ошибками. При этом разработчики сохраняют полный контроль над уровнем параллелизма для всех операций.
- Компонентность и чистота кода: Большинство функций библиотеки принимают каналы Go в качестве входных данных и возвращают новые, преобразованные каналы в качестве выходных данных. Это позволяет объединять их различными способами для построения повторно используемых конвейеров из более простых частей, аналогично Unix-пайпам. В результате параллельные программы становятся последовательностями понятных и повторно используемых операций.
- Централизованная обработка ошибок: Ошибки автоматически распространяются через конвейер и могут быть обработаны в одном месте в конце. Для более сложных сценариев Rill также предоставляет инструменты для перехвата и обработки ошибок в любой точке конвейера.
- Упрощение обработки потоков: Благодаря каналам Go встроенные функции могут обрабатывать потенциально бесконечные потоки, обрабатывая элементы по мере их поступления. Это делает Rill удобным инструментом для обработки данных в реальном времени или работы с большими наборами данных, которые не помещаются в памяти.
- Решения для сложных задач: Библиотека включает готовые функции для пакетной обработки, упорядоченного объединения потоков, map-reduce, разделения потоков, слияния и многого другого. Конвейеры, хотя обычно линейные, могут иметь любую безцикловую топологию (DAG).
- Поддержка пользовательских расширений: Поскольку Rill работает на стандартных каналах Go, легко писать пользовательские функции, совместимые с библиотекой.
- Легковесность: Rill имеет небольшой, типобезопасный API, основанный на каналах, и не имеет зависимостей, что делает его простым для интеграции в существующие проекты. Он также экономно использует ресурсы, гарантируя, что количество выделений памяти и горутин не растет с увеличением размера входных данных.
Быстрый старт:
Рассмотрим практический пример: получение пользователей из API, их активация и сохранение изменений. Он демонстрирует, как контролировать параллелизм на каждом этапе, сохраняя код чистым и управляемым. Функция
ForEach
завершает выполнение при первой ошибке, а отмена контекста через defer
останавливает все оставшиеся операции получения.
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Преобразуем срез идентификаторов пользователей в канал
ids := rill.FromSlice([]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, nil)
// Получаем пользователей из API.
// Параллелизм = 3
users := rill.Map(ids, 3, func(id int) (*mockapi.User, error) {
return mockapi.GetUser(ctx, id)
})
// Активируем пользователей.
// Параллелизм = 2
err := rill.ForEach(users, 2, func(u *mockapi.User) error {
if u.IsActive {
fmt.Printf("Пользователь %d уже активен\n", u.ID)
return nil
}
u.IsActive = true
err := mockapi.SaveUser(ctx, u)
if err != nil {
return err
}
fmt.Printf("Пользователь сохранен: %+v\n", u)
return nil
})
// Обработка ошибок
fmt.Println("Ошибка:", err)
}
Этот пример демонстрирует, как Rill упрощает построение параллельных конвейеров обработки данных, делая код более читаемым и поддерживаемым.
https://github.com/destel/rill
👉 @golang_lib
👍4👎3
Статья подробно рассматривает стратегии логирования для Go-разработчиков. Начинается с обсуждения базовых методов логирования с использованием пакета
fmt
, таких как fmt.Print
, fmt.Println
и fmt.Printf
. Затем автор переходит к более продвинутым возможностям, предлагаемым стандартным пакетом log
, который предоставляет автоматическую временную метку, уровни серьезности и возможность записи логов в различные выходные потоки. Отдельное внимание уделяется пакету
slog
, который появился в более новых версиях Go и предлагает более мощный и выразительный API для структурированного логирования, особенно полезного в продакшене. https://www.bytesizego.com/blog/guide-to-logging-in-go
👉 @golang_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2