Backend Developer Go
Уроки с примерами кода; тему можно сразу закрепить вопросами в тренажёре.
Материалы открываются после регистрации на Free.
Уроки по модулям
Инструменты и модули Go
3 урокаЕдиный инструментарий Go: сборка, запуск, форматирование и проверка кода, управление зависимостями через модули и осмысленная структура проекта. База, с которой начинается любой сервис на Go.
- Команды go: build, run, test, vet, fmt и модель сборки
- Модули: go.mod, go.sum, версии и выбор минимальной версии
- Пакеты, internal и видимость, структура проекта
Язык Go
5 уроковСемантика языка Go: базовые типы и нулевые значения, внутреннее устройство слайсов и мап, строки и руны в UTF-8, функции, замыкания и defer. Основа для чтения production-кода и понимания стоимости абстракций.
- Базовые типы, нулевые значения и приведения
- Слайсы: заголовок, len/cap, append и разделяемый массив
- Мапы: устройство, итерация без порядка и nil-мапа
- Строки, руны и байты: UTF-8 и преобразования
- Функции, замыкания, множественный возврат и defer
Структуры, методы и встраивание
3 урокаСтруктуры и их сравнимость, методы с получателем по значению и по указателю, встраивание как замена наследованию. Здесь закладывается способ Go строить поведение из композиции, а не иерархий.
- Структуры, поля, сравнимость и пустая структура
- Методы, получатели по значению и указателю, метод-сеты
- Встраивание, продвижение методов и композиция
Интерфейсы
3 урокаНеявная реализация, маленькие интерфейсы, объявление интерфейса на стороне потребителя и подводные камни вроде типизированного nil. Основной механизм полиморфизма и развязки в Go.
- Неявная реализация, маленькие интерфейсы и интерфейс у потребителя
- Устройство интерфейса и ловушка типизированного nil
- Type assertion, type switch и any
Ошибки, panic и recover
2 урокаОшибка как значение, оборачивание через %w и разбор цепочки через errors.Is/As, sentinel-ошибки, а также роль panic и recover. Обработка ошибок в Go явная и живёт в возвращаемых значениях, а не в исключениях.
- Ошибка-значение, %w, errors.Is/As и sentinel
- panic, recover и defer: когда и как
Указатели и значения
2 урокаПередача по значению, указатели и когда они нужны, разница между значением и ссылочными типами. От этих решений зависят копирование, изменяемость и нагрузка на аллокатор.
- Указатели и передача по значению
- Семантика значений и ссылочных типов
Дженерики
2 урокаПараметры типов и ограничения, встроенный comparable, обобщённые контейнеры и алгоритмы из пакетов slices и maps. Дают типобезопасность без приведений там, где раньше плодили копипасту или any.
- Параметры типов, ограничения и comparable
- Обобщённые алгоритмы и пакеты slices/maps
Модель конкурентности
2 урокаКак из горутин, каналов и синхронизации собирается конкурентная программа и чем конкурентность отличается от параллелизма. Модель памяти Go и правило happens-before — фундамент, на котором держатся остальные темы конкурентности.
- Конкурентность против параллелизма и подход Go
- Модель памяти Go и happens-before
Горутины и планировщик
3 урокаЛёгкие горутины и модель планировщика G-P-M: локальные очереди, work stealing, вытеснение и обработка блокирующих вызовов. Объясняет, почему Go держит миллионы горутин на горстке потоков.
- Горутины: запуск, стек, жизненный цикл и стоимость
- Планировщик G-P-M: очереди, work stealing, вытеснение
- Блокирующие вызовы, netpoller и GOMAXPROCS
Каналы и select
2 урокаБуферизированные и небуферизированные каналы, правила блокировки и закрытия, мультиплексирование через select. Основной способ Go передавать данные и координировать горутины вместо общей памяти.
- Каналы: буфер, блокировка, закрытие, направление, nil
- select, default, таймауты и мультиплексирование
Примитивы синхронизации
3 урокаMutex и RWMutex, WaitGroup, Once, Pool и атомарные операции, а также когда что выбирать. Нужны, чтобы защитить общее состояние без гонок там, где каналы избыточны.
- Mutex и RWMutex: защита общего состояния
- WaitGroup, Once, Pool и Cond
- Атомарные операции и sync/atomic
Пакет context
2 урокаОтмена, дедлайны и request-scoped значения через дерево контекстов. Несущая конструкция таймаутов и graceful-остановки во всех сетевых API Go.
- Отмена, дедлайны и таймауты через context
- Request-scoped значения и распространение контекста
Паттерны конкурентности и гонки
4 урокаWorker pool, fan-in/fan-out, конвейеры, а также гонки данных, дедлоки и утечки горутин. Паттерны дают форму конкурентному коду, а детектор гонок и правильное завершение — его надёжность.
- Worker pool и ограничение параллелизма
- Fan-in/fan-out, конвейеры и errgroup
- Гонки данных и детектор -race
- Дедлоки и утечки горутин
Память и сборщик мусора
3 урокаСтек и куча, конкурентный трёхцветный сборщик мусора, барьер записи и паузы stop-the-world, настройка через GOGC и GOMEMLIMIT. Понимание рантайма отделяет гарантии языка от поведения под нагрузкой.
- Стек, куча и аллокации
- Трёхцветный конкурентный GC и паузы stop-the-world
- GOGC, GOMEMLIMIT и настройка сборщика
Escape-анализ
1 урокКак компилятор решает, попадёт значение на стек или в кучу, и как это увидеть через флаги сборки. Меньше побегов в кучу — меньше аллокаций и нагрузки на сборщик мусора.
- Escape-анализ: стек или куча и как это увидеть
Профилирование
3 урокаПоиск узких мест через pprof и трассировку выполнения, диагностика аллокаций и пауз сборщика мусора, бенчмарки с учётом памяти. Оптимизация начинается с измерения, а не с догадок.
- pprof: CPU- и heap-профили
- Профили goroutine, block и mutex
- go tool trace и бенчмарки с -benchmem
HTTP-сервисы на net/http
2 урокаВстроенный HTTP-сервер и клиент Go: обработчики, маршрутизация, таймауты и работа с запросом. Для многих сервисов стандартной библиотеки достаточно без внешнего фреймворка.
- HTTP-сервер: Handler, ServeMux и таймауты
- HTTP-клиент: запросы, тело и соединения
Middleware и маршрутизация
2 урокаМаршрутизация запросов и цепочки middleware поверх http.Handler: логирование, аутентификация, восстановление после паники. Порядок обёрток определяет, как обрабатывается каждый запрос.
- Middleware как обёртка Handler: порядок и композиция
- Маршрутизация и паттерны ServeMux
JSON и сериализация
2 урокаКодирование и декодирование через encoding/json, теги структур, omitempty и собственные маршалеры. Формат обмена большинства HTTP-API, где важно контролировать форму и совместимость данных.
- encoding/json: Marshal, Unmarshal и теги
- Собственные маршалеры и потоковый Encoder/Decoder
HTTP и REST-семантика
2 урокаМетоды, коды состояния, идемпотентность, кэширование и согласование содержимого. Основа корректного и предсказуемого API независимо от фреймворка.
- Методы, коды состояния и идемпотентность
- REST-ограничения, кэширование и версионирование
Роутеры и фреймворки
1 урокЛёгкие роутеры и фреймворки (chi, gin, echo) поверх понимания net/http: удобная маршрутизация, группы, middleware. Берут на себя рутину, но не заменяют знание стандартного сервера.
- Роутеры и фреймворки поверх net/http: когда и что выбрать
Доступ к данным
3 урокаРабота с базой данных из Go: database/sql и драйвер pgx, пул соединений, транзакции, миграции и генерация типобезопасного кода через sqlc. Нужно понимать, какой SQL выполняется и как управляется соединение.
- database/sql, драйверы, pgx и пул соединений
- Транзакции и отмена запросов через context
- Миграции схемы и типобезопасные запросы через sqlc
Готовность к продакшну
1 урокЧто отличает рабочий сервис от учебного: конфигурация, тесты, наблюдаемость, устойчивость к сбоям и предсказуемый деплой. Эти свойства закладываются в код, а не добавляются потом.
- Конфигурация сервиса и принципы twelve-factor
Тестирование
4 урокаПакет testing, table-driven тесты и подтесты, httptest для HTTP-обработчиков, бенчмарки, fuzzing и детектор гонок. Тесты фиксируют поведение и защищают от регрессий при изменениях.
- testing: table-driven, подтесты и t.Parallel
- httptest и интерфейсные моки
- Бенчмарки, fuzzing и -race
- Покрытие и организация тестов
Наблюдаемость
2 урокаСтруктурное логирование через log/slog, метрики и трассировки по OpenTelemetry, health-проверки. Без них поведение сервиса под нагрузкой остаётся непрозрачным.
- Структурное логирование через log/slog
- Метрики и трассировки по OpenTelemetry
Устойчивость и завершение
2 урокаТаймауты и отмена через context, повторы и размыкатели цепи, корректное завершение сервиса. Сетевые вызовы падают, и сервис должен переживать частичные отказы без каскада.
- Таймауты, отмена и graceful shutdown
- Повторы с backoff и размыкатель цепи
Контейнеры и деплой
2 урокаУпаковка сервиса в контейнер: multi-stage сборка, минимальный образ и статический бинарник Go, переменные окружения и кросс-компиляция. Воспроизводимая сборка делает деплой предсказуемым.
- Multi-stage Dockerfile и статический бинарник
- Кросс-компиляция, build-флаги и embed
О курсе
Глубокое понимание языка Go и его среды выполнения для backend-разработки. Курс разбирает не синтаксис, а семантику языка и поведение рантайма: модель типов, слайсы и мапы, интерфейсы и ошибки как значения, конкурентность (горутины, каналы, планировщик, модель памяти), сборку мусора и escape-анализ, а также прикладной слой — HTTP-сервисы, доступ к данным, тестирование и продакшн-практики. Цель — научиться видеть стоимость абстракций и поведение кода под нагрузкой, а не просто заставлять его работать.