🏎 Вы уже сталкивались с «глухими» зависаниями и гонками данных в Go? Настало время взять каналы под контроль!
💻 На открытом уроке «Подводные камни каналов в Go — и как их обходить» 1 июля в 20:00 МСК мы не просто обсудим, что такое каналы:
— покажем реальные кейсы;
— узнаем, где без них не обойтись;
— разберём частые ошибки, которые тормозят ваши сервисы.
🚀 Представьте: ваш сервис обрабатывает запросы параллельно, без блокировок и утечек. Вы глубоко понимаете, как каналы помогают строить конкурентный код и уверенно внедряете это на любом проекте.
👉 Регистрируйтесь сейчас и получите персональную скидку на курс «Golang Developer. Professional»: https://vk.cc/cNbzNf
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
💻 На открытом уроке «Подводные камни каналов в Go — и как их обходить» 1 июля в 20:00 МСК мы не просто обсудим, что такое каналы:
— покажем реальные кейсы;
— узнаем, где без них не обойтись;
— разберём частые ошибки, которые тормозят ваши сервисы.
🚀 Представьте: ваш сервис обрабатывает запросы параллельно, без блокировок и утечек. Вы глубоко понимаете, как каналы помогают строить конкурентный код и уверенно внедряете это на любом проекте.
👉 Регистрируйтесь сейчас и получите персональную скидку на курс «Golang Developer. Professional»: https://vk.cc/cNbzNf
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
❤1
Пишем рантайм Golang на чистом C
Часть №1 | Планировщик Go
Часть №2 | Масштабирование планировщика
источник
👉 @golang_lib
Часть №1 | Планировщик Go
Часть №2 | Масштабирование планировщика
источник
👉 @golang_lib
👍5🤔1
🛠 gRPC через HTTP/3
На момент написания статьи HTTP/3 поддерживается 30,4% из топ-10 миллионов сайтов. Такое проникновение на рынок впечатляет, однако, похоже, что весь этот прогресс достигнут почти исключительно благодаря усилиям со стороны браузеров, балансировщиков нагрузки и CDN-провайдеров. А как обстоят дела с бэкендом? Как HTTP/3 чувствует себя там? Увы, ответ не столь воодушевляющий.
Именно поэтому мне стало особенно интересно рассмотреть HTTP/3 в контексте gRPC. Хотя gRPC сыграл ключевую роль в популяризации HTTP/2, то же самое пока нельзя сказать про HTTP/3 — несмотря на то, что он обещает ряд преимуществ, которые, на первый взгляд, идеально подходят для gRPC-сервисов.
В этом посте мы разберёмся, что такое HTTP/3, и исследуем убедительные причины, по которым он отлично вписывается в архитектуру gRPC-приложений. Мы рассмотрим технические улучшения, которые делают HTTP/3 более быстрым, надёжным и безопасным. Но не ограничимся теорией — мы перейдём к практике: на примерах на Go покажем, как настроить и протестировать gRPC-серверы и клиенты, работающие по HTTP/3.
К концу этого пути у вас будет чёткое понимание преимуществ HTTP/3 для gRPC, знаний о доступных инструментах для его использования уже сегодня и представление о том, какое будущее он может принести в разработку API. Пристегните ремни — впереди вас ждёт знакомство с новым поколением сетевых протоколов!
https://kmcd.dev/posts/grpc-over-http3/
👉 @golang_lib
На момент написания статьи HTTP/3 поддерживается 30,4% из топ-10 миллионов сайтов. Такое проникновение на рынок впечатляет, однако, похоже, что весь этот прогресс достигнут почти исключительно благодаря усилиям со стороны браузеров, балансировщиков нагрузки и CDN-провайдеров. А как обстоят дела с бэкендом? Как HTTP/3 чувствует себя там? Увы, ответ не столь воодушевляющий.
Именно поэтому мне стало особенно интересно рассмотреть HTTP/3 в контексте gRPC. Хотя gRPC сыграл ключевую роль в популяризации HTTP/2, то же самое пока нельзя сказать про HTTP/3 — несмотря на то, что он обещает ряд преимуществ, которые, на первый взгляд, идеально подходят для gRPC-сервисов.
В этом посте мы разберёмся, что такое HTTP/3, и исследуем убедительные причины, по которым он отлично вписывается в архитектуру gRPC-приложений. Мы рассмотрим технические улучшения, которые делают HTTP/3 более быстрым, надёжным и безопасным. Но не ограничимся теорией — мы перейдём к практике: на примерах на Go покажем, как настроить и протестировать gRPC-серверы и клиенты, работающие по HTTP/3.
К концу этого пути у вас будет чёткое понимание преимуществ HTTP/3 для gRPC, знаний о доступных инструментах для его использования уже сегодня и представление о том, какое будущее он может принести в разработку API. Пристегните ремни — впереди вас ждёт знакомство с новым поколением сетевых протоколов!
https://kmcd.dev/posts/grpc-over-http3/
👉 @golang_lib
🚀 Микросервисы — это не тренд, а стандарт. А Go — язык, который выбрали для этого стандарта в крупнейших корпорациях. Если вы уже пишете на Go, следующий шаг очевиден.
На курсе от OTUS вы освоите:
🔹 Проектирование микросервисной архитектуры на Go
🔹 Чистая архитектура, CI/CD, gRPC, REST
🔹 Логирование, Kafka, PostgreSQL, мониторинг
🔹 И многое другое!
❗️Программа ориентирована на Go-разработчиков и архитекторов ПО. После курса вы сможете проектировать масштабируемые системы, автоматизировать разработку, уверенно внедрять мониторинг и проектировать API, которые работают под нагрузкой.
Оставьте заявку прямо сейчас: https://vk.cc/cNjx7m
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
На курсе от OTUS вы освоите:
🔹 Проектирование микросервисной архитектуры на Go
🔹 Чистая архитектура, CI/CD, gRPC, REST
🔹 Логирование, Kafka, PostgreSQL, мониторинг
🔹 И многое другое!
❗️Программа ориентирована на Go-разработчиков и архитекторов ПО. После курса вы сможете проектировать масштабируемые системы, автоматизировать разработку, уверенно внедрять мониторинг и проектировать API, которые работают под нагрузкой.
Оставьте заявку прямо сейчас: https://vk.cc/cNjx7m
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🤮3
Статический анализ как инструмент для управления сложностью кода
С ростом программных проектов мы сталкиваемся с неизбежным увеличением сложности. Кодовая база разрастается, появляются зависимости, а поддержка становится всё дороже. Один из способов борьбы с этим — статический анализ.
Что это такое?
Статический анализ — это процесс изучения кода без его выполнения. Такие инструменты помогают находить ошибки, уязвимости, дублирование кода, несоответствие стилю и потенциальные проблемы производительности.
https://www.dolthub.com/blog/2024-07-24-static-analysis/
👉 @golang_lib
С ростом программных проектов мы сталкиваемся с неизбежным увеличением сложности. Кодовая база разрастается, появляются зависимости, а поддержка становится всё дороже. Один из способов борьбы с этим — статический анализ.
Что это такое?
Статический анализ — это процесс изучения кода без его выполнения. Такие инструменты помогают находить ошибки, уязвимости, дублирование кода, несоответствие стилю и потенциальные проблемы производительности.
https://www.dolthub.com/blog/2024-07-24-static-analysis/
👉 @golang_lib
❤3👍1
Чеклист рефакторинга
Рефакторинг — это процесс улучшения внутренней структуры кода без изменения его поведения. Чтобы не сломать функциональность, важно делать это системно.
Чеклист:
1. Есть ли тесты?
Перед началом убедитесь, что код покрыт тестами. Если их нет — напишите.
2. Маленькие шаги.
Меняйте код постепенно. После каждого шага запускайте тесты, чтобы убедиться, что ничего не сломалось.
3. Автоматические проверки.
Используйте инструменты статического анализа и линтеры. Они помогут выявить проблемы до того, как они попадут в продакшен.
4. Ищите дублирование.
Повторяющийся код — главный кандидат для рефакторинга.
5. Упрощайте.
Если часть кода можно сделать проще — делайте.
6. Читабельность важнее.
Код читается чаще, чем пишется. Улучшение структуры и понятности всегда оправдано.
Главная цель: сделать код чище, не нарушая его поведение.
https://quii.gitbook.io/learn-go-with-tests/testing-fundamentals/refactoring-checklist
👉 @golang_lib
Рефакторинг — это процесс улучшения внутренней структуры кода без изменения его поведения. Чтобы не сломать функциональность, важно делать это системно.
Чеклист:
1. Есть ли тесты?
Перед началом убедитесь, что код покрыт тестами. Если их нет — напишите.
2. Маленькие шаги.
Меняйте код постепенно. После каждого шага запускайте тесты, чтобы убедиться, что ничего не сломалось.
3. Автоматические проверки.
Используйте инструменты статического анализа и линтеры. Они помогут выявить проблемы до того, как они попадут в продакшен.
4. Ищите дублирование.
Повторяющийся код — главный кандидат для рефакторинга.
5. Упрощайте.
Если часть кода можно сделать проще — делайте.
6. Читабельность важнее.
Код читается чаще, чем пишется. Улучшение структуры и понятности всегда оправдано.
Главная цель: сделать код чище, не нарушая его поведение.
https://quii.gitbook.io/learn-go-with-tests/testing-fundamentals/refactoring-checklist
👉 @golang_lib
👍1
🚀 Вебинар: Тестируем скорость сайтов как профи с WebPageTest!
Привет, backend-разработчик! Ты уверен, что твой сайт летает, а не ползет, как улитка в пробке? 🐌💨
Бесплатный вебинар по WebPageTest покажет, как измерить скорость твоего веб-приложения без магии и шаманских бубнов: регистрация
Разберем:
✅ Как тестировать скорость правильно (спойлер: F5 – не метод)
✅ Что скрывает архитектура WebPageTest
✅ Как читать результаты тестов и не плакать
После вебинара ты сможешь:
🔹 Выбирать систему тестирования
🔹 Проводить тесты так, чтобы даже Google позавидовал
🔹 Анализировать результаты и чинить тормоза
📅 Регистрируйся → получишь напоминалку перед стартом: регистрация
P.S. Если хочешь прокачаться в оптимизации на 100%, приходи на курс «Оптимизация производительности веб-приложений». Не упусти шанс сделать сайты быстрее, чем твой коллег успевает сказать «Это не баг, это фича»! 😉
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Привет, backend-разработчик! Ты уверен, что твой сайт летает, а не ползет, как улитка в пробке? 🐌💨
Бесплатный вебинар по WebPageTest покажет, как измерить скорость твоего веб-приложения без магии и шаманских бубнов: регистрация
Разберем:
✅ Как тестировать скорость правильно (спойлер: F5 – не метод)
✅ Что скрывает архитектура WebPageTest
✅ Как читать результаты тестов и не плакать
После вебинара ты сможешь:
🔹 Выбирать систему тестирования
🔹 Проводить тесты так, чтобы даже Google позавидовал
🔹 Анализировать результаты и чинить тормоза
📅 Регистрируйся → получишь напоминалку перед стартом: регистрация
P.S. Если хочешь прокачаться в оптимизации на 100%, приходи на курс «Оптимизация производительности веб-приложений». Не упусти шанс сделать сайты быстрее, чем твой коллег успевает сказать «Это не баг, это фича»! 😉
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
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
👍5❤2
«System Design — как темный лес. Go — вроде бы знаю, но знания поверхностные. А собеседование снова провавил на задаче по concurrency»
Знакомо?
Даже у разработчиков с 2-5 годами опыта остаются такие пробелы, которые мешают чувствовать уверенность:
– знаю много паттернов и приемов, но не знаю где и когда их применять;
– на System Design интервью не получается спроектировать систему за час;
– кажется, что понимаю Go, но только до тех пор, пока не столкнусь с задачами на собеседованиях.
🎓 В телеграм-канале Балун Владимир есть материалы, которые помогают прокачать Go и подготовиться к собеседованиям — без воды и пересказов статей из интернета.
1️⃣ Технические разборы:
– Итераторы в Golang
– Паттерны использования каналов в Go
– Внутреннее устройство аллокатора Go
– Внутреннее устройство мьютексов в Go и Linux
2️⃣ Подготовка к собеседованиям:
– Concurrency задачи с Go собеседований
– Решение сложных задач с Go собеседований
– Как подготовиться к System Design интервью
3️⃣ Карьера и опыт:
– Особенности Golang
– Карьера программиста в BigTech
– Путь от джуна до тимлида Яндекса
Если хочется разобраться в Go глубже, научиться объяснять сложные вещи и уверенно проходить собеседования — канал точно пригодится.
Автор канала - Владимир Балун. Разрабатывал высоконагруженные сервисы на С++ и Go в Тинькофф, Mail.ru и Ozon. Руководил командой распределенной трассировки запросов в Яндексе (11GB/s трафик) и провел больше ста технических интервью в разных компаниях. Сейчас создает образовательные проекты и делится опытом в телеграме.
Канал открыт. Без флуда. Только польза.
➡️ Подписаться
Реклама. ИП БАЛУН В.Н., ОГРН 322619600034193 erid: 2VtzqwCaW1e
Знакомо?
Даже у разработчиков с 2-5 годами опыта остаются такие пробелы, которые мешают чувствовать уверенность:
– знаю много паттернов и приемов, но не знаю где и когда их применять;
– на System Design интервью не получается спроектировать систему за час;
– кажется, что понимаю Go, но только до тех пор, пока не столкнусь с задачами на собеседованиях.
– Итераторы в Golang
– Паттерны использования каналов в Go
– Внутреннее устройство аллокатора Go
– Внутреннее устройство мьютексов в Go и Linux
– Concurrency задачи с Go собеседований
– Решение сложных задач с Go собеседований
– Как подготовиться к System Design интервью
– Особенности Golang
– Карьера программиста в BigTech
– Путь от джуна до тимлида Яндекса
Если хочется разобраться в Go глубже, научиться объяснять сложные вещи и уверенно проходить собеседования — канал точно пригодится.
Автор канала - Владимир Балун. Разрабатывал высоконагруженные сервисы на С++ и Go в Тинькофф, Mail.ru и Ozon. Руководил командой распределенной трассировки запросов в Яндексе (11GB/s трафик) и провел больше ста технических интервью в разных компаниях. Сейчас создает образовательные проекты и делится опытом в телеграме.
Канал открыт. Без флуда. Только польза.
Реклама. ИП БАЛУН В.Н., ОГРН 322619600034193 erid: 2VtzqwCaW1e
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤1👍1
Написание идиоматичных CLI на Go
Мы рассмотрим основы пакета flag в Go, создание собственных типов флагов и настройку автоматической генерации справки, чтобы сделать наш CLI более удобным для использования.
В качестве примера в этой статье мы будем ссылаться на приложение для проверки доступности (health check), которое принимает набор URL-адресов и проверяет их на доступность. Детали реализации будут оставлены читателю (так как они не являются основной темой этого поста).
https://www.bytesizego.com/blog/idiomatic-go-cli
👉 @golang_lib
Мы рассмотрим основы пакета flag в Go, создание собственных типов флагов и настройку автоматической генерации справки, чтобы сделать наш CLI более удобным для использования.
В качестве примера в этой статье мы будем ссылаться на приложение для проверки доступности (health check), которое принимает набор URL-адресов и проверяет их на доступность. Детали реализации будут оставлены читателю (так как они не являются основной темой этого поста).
https://www.bytesizego.com/blog/idiomatic-go-cli
👉 @golang_lib
👍2
Как работают массивы в Go и почему с ними бывает непросто при использовании for-range
Классические массивы и срезы в Go на первый взгляд довольно просты. Массивы имеют фиксированный размер, а срезы — динамические. Но скажу честно: Go может казаться простым только на поверхности — под капотом там происходит гораздо больше, чем кажется.
Как обычно, начнём с основ, а затем копнём чуть глубже. Не переживайте, массивы становятся куда интереснее, если взглянуть на них под разными углами.
Что такое массив?
Массивы в Go очень похожи на массивы в других языках программирования. Они имеют фиксированный размер и хранят элементы одного типа в смежных (непрерывных) ячейках памяти.
Это значит, что Go может быстро получать доступ к каждому элементу, так как их адреса вычисляются на основе начального адреса массива и индекса элемента.
https://victoriametrics.com/blog/go-array/
👉 @golang_lib
Классические массивы и срезы в Go на первый взгляд довольно просты. Массивы имеют фиксированный размер, а срезы — динамические. Но скажу честно: Go может казаться простым только на поверхности — под капотом там происходит гораздо больше, чем кажется.
Как обычно, начнём с основ, а затем копнём чуть глубже. Не переживайте, массивы становятся куда интереснее, если взглянуть на них под разными углами.
Что такое массив?
Массивы в Go очень похожи на массивы в других языках программирования. Они имеют фиксированный размер и хранят элементы одного типа в смежных (непрерывных) ячейках памяти.
Это значит, что Go может быстро получать доступ к каждому элементу, так как их адреса вычисляются на основе начального адреса массива и индекса элемента.
https://victoriametrics.com/blog/go-array/
👉 @golang_lib
👍1
В хабе на Хабр «Разработка публичных облаков» — свежие статьи
от инженеров MWS Cloud Platform⬜️ .
➡️ Создаем S3-хранилище с нуля. Ультимативный лонгрид про современный S3-ландшафт и нашу архитектуру Object Storage.
➡️ Multus в Kubernetes. Как мы подключили поды к сервисам в overlay-сети с IPv4 и зачем это вообще понадобилось.
➡️ DHCP-сервер облака. Как мы раздаём один и тот же IP в изолированных сетевых пространствах (VRF), какие используем опции и как мониторим доступность DHCP-серверов.
➡️ Development Platform. Зачем мы пишем общие библиотеки и компоненты, как развиваем внутренний open source и с помощью каких инструментов общаются сервисы MWS Cloud Platform и их создатели.
Если вам интересны архитектурные решения для настоящего highload'а — эти материалы будут вам полезны.
🔗 Подпишись на облачный хаб MWS — там регулярно рассказываем, как строим новое облако с нуля.
от инженеров MWS Cloud Platform
Если вам интересны архитектурные решения для настоящего highload'а — эти материалы будут вам полезны.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1