Библиотека Go (Golang) разработчика
2.57K subscribers
263 photos
95 videos
29 files
334 links
Полезные материалы по всему, что может быть полезно Golang разработчику. По всем вопросам @evgenycarter
Download Telegram
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
👍53
«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
FUSE + Go: ковка собственной виртуальной файловой системы на блочном устройстве

В этой статье подробно разбирается создание пользовательской файловой системы с помощью 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
👍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
Media is too big
VIEW IN TELEGRAM
Approf

Нативное 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 map — это встроенный тип данных, который реализует хеш-таблицу для хранения пар ключ–значение. В статье рассматриваются важные детали работы map в Go, которые часто упускают из виду, и даются практические рекомендации по их использованию.

Ключевые моменты:

Неупорядоченность
Go не гарантирует порядок обхода элементов в map. Если нужен определённый порядок, нужно использовать срез для сортировки ключей перед обходом.

Zero value
Нулевое значение для mapnil. Обращение к неинициализированной карте для чтения безопасно и вернёт нулевое значение для типа, но запись в неё приведёт к панике. Создавать карту можно через 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 августа

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

Узнайте подробности и оставьте заявку.
👍1🤡1