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❤3
«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
FUSE + Go: ковка собственной виртуальной файловой системы на блочном устройстве
В этой статье подробно разбирается создание пользовательской файловой системы с помощью FUSE и языка Go. На реальном примере мы пройдём путь от установки окружения до реализации чтения, записи, метаданных и параллельного доступа. В процессе встретятся живые комментарии, личные наблюдения и советы, которые помогут избежать распространённых подводных камней.
Введение
Давно хотел понять, как сделать “файловую систему в файле” или на блочном устройстве, чтобы потом подключить её к любому Linux-серверу. Оказалось, что комбинация FUSE и Go — отличный вариант для быстрой прототипировки без костылей на C. В этой статье я расскажу о своём опыте, забавных факапах и главных открытиях на пути к рабочей системе.
https://habr.com/ru/articles/933658/
👉 @golang_lib
В этой статье подробно разбирается создание пользовательской файловой системы с помощью FUSE и языка Go. На реальном примере мы пройдём путь от установки окружения до реализации чтения, записи, метаданных и параллельного доступа. В процессе встретятся живые комментарии, личные наблюдения и советы, которые помогут избежать распространённых подводных камней.
Введение
Давно хотел понять, как сделать “файловую систему в файле” или на блочном устройстве, чтобы потом подключить её к любому Linux-серверу. Оказалось, что комбинация FUSE и Go — отличный вариант для быстрой прототипировки без костылей на C. В этой статье я расскажу о своём опыте, забавных факапах и главных открытиях на пути к рабочей системе.
https://habr.com/ru/articles/933658/
👉 @golang_lib
👍2
Go: жарим общие данные. Атомно, быстро и без мьютексов
Как правило, в Go для безопасного доступа к общим данным используются мьютексы. Да, каналы тоже можно приспособить для изменения общих данных, так как они потокобезопасны, но это усложняет и замедляет логику.
Но в этой статье мы поговорим о другом. Современные процессоры имеют поддержку атомарных операций, что позволяет на основе них организовывать работу с общими данными до нескольких раз быстрее, чем с помощью общепринятых вариантов. Так как мьютексы реализованы на основе ОС, каналы сделаны на основе внутреннего кода Go с использованием тех же мьютексов из ОС под капотом, а атомарные операции делает сам процессор аппаратно за существенно меньшее количество тактов.
https://habr.com/ru/companies/ruvds/articles/833264/
👉 @golang_lib
Как правило, в Go для безопасного доступа к общим данным используются мьютексы. Да, каналы тоже можно приспособить для изменения общих данных, так как они потокобезопасны, но это усложняет и замедляет логику.
Но в этой статье мы поговорим о другом. Современные процессоры имеют поддержку атомарных операций, что позволяет на основе них организовывать работу с общими данными до нескольких раз быстрее, чем с помощью общепринятых вариантов. Так как мьютексы реализованы на основе ОС, каналы сделаны на основе внутреннего кода Go с использованием тех же мьютексов из ОС под капотом, а атомарные операции делает сам процессор аппаратно за существенно меньшее количество тактов.
https://habr.com/ru/companies/ruvds/articles/833264/
👉 @golang_lib
👍2🤣1
🚀 Хотите ускорить обработку во Flutter-приложениях, вынеся тяжёлые задачи на C, Rust или Go?
Приходите на открытый вебинар «Запускаем код C, Rust или Go через FFI» 6 августа в 20:00 МСК. На уроке мы покажем:
- Как написать простую функцию на C, Rust и Go и вызвать её из консольного Dart-приложения.
- Как интегрировать эту же функцию во Flutter-приложение.
- Работу со сторонними библиотеками и нюансы FFI-плагина.
- Примеры Makefile для автоматизации сборки под разные архитектуры.
❗️ Вы научитесь компилировать C/Rust/Go-бинарники, вызывать их из Flutter и создавать скрипты сборки. Всё это — надёжный способ оптимизировать обработку изображений, криптографию и другие ресурсоёмкие операции.
Этот урок проходит в преддверии старта курса «Flutter Mobile Developer» от OTUS. 🔥 Все участники получат записи трех прошлых уроков!
👉 Регистрация открыта: https://vk.cc/cOhkoz
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приходите на открытый вебинар «Запускаем код C, Rust или Go через FFI» 6 августа в 20:00 МСК. На уроке мы покажем:
- Как написать простую функцию на C, Rust и Go и вызвать её из консольного Dart-приложения.
- Как интегрировать эту же функцию во Flutter-приложение.
- Работу со сторонними библиотеками и нюансы FFI-плагина.
- Примеры Makefile для автоматизации сборки под разные архитектуры.
❗️ Вы научитесь компилировать C/Rust/Go-бинарники, вызывать их из Flutter и создавать скрипты сборки. Всё это — надёжный способ оптимизировать обработку изображений, криптографию и другие ресурсоёмкие операции.
Этот урок проходит в преддверии старта курса «Flutter Mobile Developer» от OTUS. 🔥 Все участники получат записи трех прошлых уроков!
👉 Регистрация открыта: https://vk.cc/cOhkoz
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Media is too big
VIEW IN TELEGRAM
Approf
Нативное macOS-приложение для просмотра результатов профилирования pprof, включающее drag/drop, изменение порядка, светлый/темный режим и сохранение сессий.
Возможности
- Поддержка drag-and-drop файла pprof для открытия
- Возможность сравнения pprof-профилей с параметром
- Быстрое добавление, удаление и переупорядочивание файлов
- Тёмный и светлый режимы интерфейса
- Сохранение сессий для последующего использования
Технологии
- SwiftUI и AppKit для UI
- Composable Architecture (TCA) для управления состоянием
- Запуск бинарника pprof в отдельном процессе
https://github.com/moderato-app/approf
👉 @golang_lib
Нативное macOS-приложение для просмотра результатов профилирования pprof, включающее drag/drop, изменение порядка, светлый/темный режим и сохранение сессий.
Возможности
- Поддержка drag-and-drop файла pprof для открытия
- Возможность сравнения pprof-профилей с параметром
-diff_base
- Быстрое добавление, удаление и переупорядочивание файлов
- Тёмный и светлый режимы интерфейса
- Сохранение сессий для последующего использования
Технологии
- SwiftUI и AppKit для UI
- Composable Architecture (TCA) для управления состоянием
- Запуск бинарника pprof в отдельном процессе
https://github.com/moderato-app/approf
👉 @golang_lib
👍1
🔥 Go Maps Explained: Как на самом деле хранятся пары ключ-значение
Go
Ключевые моменты:
Неупорядоченность
Go не гарантирует порядок обхода элементов в
Zero value
Нулевое значение для
Удаление элементов
Удаление производится функцией
Проверка существования ключа
При чтении из карты можно использовать «двухзначную» форму:
где
Память и рост
Go автоматически увеличивает ёмкость карты при необходимости, но уменьшения после удаления большого числа элементов не происходит — память будет удерживаться до освобождения карты целиком.
Конкурентный доступ
Карты в Go не потокобезопасны. Параллельная запись и чтение могут привести к панике. Для защиты используют
👉 Читать
👉 @golang_lib
Go
map
— это встроенный тип данных, который реализует хеш-таблицу для хранения пар ключ–значение. В статье рассматриваются важные детали работы map
в Go, которые часто упускают из виду, и даются практические рекомендации по их использованию.Ключевые моменты:
Неупорядоченность
Go не гарантирует порядок обхода элементов в
map
. Если нужен определённый порядок, нужно использовать срез для сортировки ключей перед обходом.Zero value
Нулевое значение для
map
— nil
. Обращение к неинициализированной карте для чтения безопасно и вернёт нулевое значение для типа, но запись в неё приведёт к панике. Создавать карту можно через make()
или литерал.Удаление элементов
Удаление производится функцией
delete(m, key)
. Если ключа нет — операция безопасна, ошибок не будет.Проверка существования ключа
При чтении из карты можно использовать «двухзначную» форму:
value, ok := m[key]
где
ok
— булево значение, указывающее на наличие ключа.Память и рост
Go автоматически увеличивает ёмкость карты при необходимости, но уменьшения после удаления большого числа элементов не происходит — память будет удерживаться до освобождения карты целиком.
Конкурентный доступ
Карты в Go не потокобезопасны. Параллельная запись и чтение могут привести к панике. Для защиты используют
sync.Mutex
или sync.Map
.👉 Читать
👉 @golang_lib
👍2
Яндекс создаёт продукты и сервисы для миллионов пользователей. Нейросетевой поиск, умные устройства, машинный перевод — задачи, где нет готовых решений.
Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке.
Как это работает
• Подаёте заявку до 18 августа
• Проходите технические секции 23 и 24 августа
• Получаете офер 24 августа
После найма мы предложим поработать в трёх командах несколько недель. Будет время погрузиться в работу, прочувствовать атмосферу и выбрать проект, который вам больше подходит.
Узнайте подробности и оставьте заявку.
Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке.
Как это работает
• Подаёте заявку до 18 августа
• Проходите технические секции 23 и 24 августа
• Получаете офер 24 августа
После найма мы предложим поработать в трёх командах несколько недель. Будет время погрузиться в работу, прочувствовать атмосферу и выбрать проект, который вам больше подходит.
Узнайте подробности и оставьте заявку.
👍1🤡1