Библиотека Go (Golang) разработчика
2.56K subscribers
254 photos
93 videos
29 files
325 links
Полезные материалы по всему, что может быть полезно Golang разработчику. По всем вопросам @evgenycarter
Download Telegram
🏎 Вы уже сталкивались с «глухими» зависаниями и гонками данных в Go? Настало время взять каналы под контроль!

💻 На открытом уроке «Подводные камни каналов в Go — и как их обходить» 1 июля в 20:00 МСК мы не просто обсудим, что такое каналы:

— покажем реальные кейсы;
— узнаем, где без них не обойтись;
— разберём частые ошибки, которые тормозят ваши сервисы.

🚀 Представьте: ваш сервис обрабатывает запросы параллельно, без блокировок и утечек. Вы глубоко понимаете, как каналы помогают строить конкурентный код и уверенно внедряете это на любом проекте.

👉 Регистрируйтесь сейчас и получите персональную скидку на курс «Golang Developer. Professional»: https://vk.cc/cNbzNf

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
1
Пишем рантайм Golang на чистом C

Часть №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
🚀 Микросервисы — это не тренд, а стандарт. А Go — язык, который выбрали для этого стандарта в крупнейших корпорациях. Если вы уже пишете на Go, следующий шаг очевиден.

На курсе от 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
3👍1
Чеклист рефакторинга

Рефакторинг — это процесс улучшения внутренней структуры кода без изменения его поведения. Чтобы не сломать функциональность, важно делать это системно.

Чеклист:

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
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
👍52
«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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41👍1
Написание идиоматичных CLI на Go

Мы рассмотрим основы пакета 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
👍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 — там регулярно рассказываем, как строим новое облако с нуля.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥1