Содержание курса
Первые шаги
1 урок
1.
Старт
↗
Настройка окружения
4 урока
1.
VS Code: установка и первые шаги
↗
2.
Установка
↗
3.
Hello GO
↗
4.
Донастройка VS Code
↗
Базовые типы и переменные
11 уроков
1.
Структура Go-проекта: пакеты, модули и организация кода
↗
2.
Организация кода. Точка входа
↗
3.
Типы данных в Go: система числовых типов
↗
4.
Основа базовых типов данных в Go: bool, string, float
↗
5.
Объявление переменных и форматированный вывод в Go
↗
6.
Анатомия переменной: память, адреса и размеры в Go
↗
7.
Правила именования идентификаторов
↗
8.
Экспорт идентификаторов и соглашения об аббревиатурах
↗
9.
Комментарии: однострочные, многострочные и документирование
↗
10.
Статическая типизация и краткое объявление переменных
↗
11.
Нулевые значения (Zero Values)
↗
Выражения и константы
7 уроков
1.
Арифметические операции
↗
2.
Операторы инкремента/декремента и присваивания
↗
3.
Побитовые операции
↗
4.
Пакет fmt: форматированный вывод
↗
5.
Продвинутое форматирование
↗
6.
Константы
↗
7.
Техническое задание #1
↗
Типы и пользовательский ввод
6 уроков
1.
Пакет math
↗
2.
Псевдонимы типов
↗
3.
Приведение типов
↗
4.
Пользовательский ввод
↗
5.
Техническое задание #2
↗
6.
Практика кода
↗
Память, указатели и продвинутый ввод данных
2 урока
1.
Области видимости, указатели, продвинутый ввод
↗
2.
Продвинутый ввод и итоги
↗
Принятие решений: условия и логика
7 уроков
1.
Операции сравнения
↗
2.
Логические операторы
↗
3.
Условные конструкции
↗
4.
Инициализация переменных в условии
↗
5.
Техническое задание #3
↗
6.
Оператор switch
↗
7.
Практика кода
↗
Повторение
5 уроков
1.
Генерация псевдослучайных чисел
↗
2.
Циклы: базовые структуры управления
↗
3.
Цикл for
↗
4.
Дополнение
↗
5.
Практика кода
↗
Массивы
5 уроков
1.
Массивы: основы
↗
2.
Основы работы с массивами
↗
3.
Циклы и перебор массивов
↗
4.
Практические задачи с массивами
↗
5.
Алгоритмы поиска и обработки данных
↗
Слайсы
5 уроков
1.
Введение в слайсы
↗
2.
Устройство и базовые операции
↗
3.
Копирование, многомерность и специфика типа
↗
4.
Практика: числовые срезы
↗
5.
Практика: строки и «коллекции задач»
↗
Строки
5 уроков
1.
Основы строк и внутреннее устройство
↗
2.
Длина строк, байты и руны
↗
3.
Перебор строк и работа с символами
↗
4.
Пакет strings
↗
5.
Производительность
↗
Применение строк и срезов
3 урока
1.
Техническое задание #5
↗
2.
Техническое задание #4
↗
3.
Техническое задание #6
↗
Коллекции (map и set)
2 урока
1.
Ассоциативные массивы
↗
2.
Множества
↗
Техническое задание #7
9 уроков
1.
Постановка задачи
↗
2.
Базовый интерфейс и структура
↗
3.
Добавление книг
↗
4.
Просмотр книг
↗
5.
Удаление книг
↗
6.
Поиск
↗
7.
Добавление пользователей
↗
8.
Книги кользователя
↗
9.
Выдача книг
↗
Функции
3 урока
1.
Функции: принцип DRY
↗
2.
Основы функций
↗
3.
Резюме
↗
Критические ситуации
3 урока
1.
Ошибки
↗
2.
Паники
↗
3.
Выводы
↗
Техническое задание #8
2 урока
1.
Постановка задачи
↗
2.
Реализация
↗
Про время
2 урока
1.
Основа
↗
2.
Всё, что нужно знать
↗
Про файлы и директории
2 урока
1.
Основа
↗
2.
Всё, что нужно знать
↗
Техническое задание #9
15 уроков
1.
Постановка задачи
↗
2.
Начало
↗
3.
utils
↗
4.
parse-format
↗
5.
storage part 1
↗
6.
storage part 2
↗
7.
storage part 3
↗
8.
storage part 4
↗
9.
service 1
↗
10.
service 2
↗
11.
handler 1
↗
12.
handler 2
↗
13.
menu
↗
14.
preRun
↗
15.
Итоги
↗
Структуры
5 уроков
1.
Основы организации данных
↗
2.
Создание и инициализация
↗
3.
Инициализация структур и видимость
↗
4.
Создание структур
↗
5.
Резюме
↗
Техническое задание #10
2 урока
1.
Постановка задачи
↗
2.
Реализация
↗
Про JSON
3 урока
1.
Предназначение
↗
2.
Сериализация
↗
3.
Десериализация
↗
Композиция — не наследование
5 уроков
1.
Дополнение
↗
2.
Демонстрация
↗
3.
Техническое задание #11
↗
4.
Реализация
↗
5.
Итоги
↗
Интерфейсы
3 урока
1.
Основа
↗
2.
Замечание
↗
3.
Погружение
↗
Практический проект: CRUD-приложение с персистентностью
25 уроков
1.
Клонирование шаблона и инициализация проекта
↗
2.
Создание моделей Contact и ContactRelation
↗
3.
DTO для обновления контакта с указателями
↗
4.
Валидация полей и доменные ошибки
↗
5.
Фабричная функция NewContact
↗
6.
Методы управления тегами контакта
↗
7.
Управление связями между контактами
↗
8.
Структура ContactBook и конструктор
↗
9.
CRUD-операции: создание и чтение контактов
↗
10.
CRUD-операции: обновление и удаление
↗
11.
Реализация поиска по имени, телефону и тегам
↗
12.
Методы работы со связями в ContactBook
↗
13.
Методы сериализации и десериализации
↗
14.
Интерфейс Storage для персистентности
↗
15.
JSONStorage: реализация метода Load
↗
16.
JSONStorage: атомарная запись файлов
↗
17.
Тестирование ContactBook и JSONStorage
↗
18.
Структура CLI и внедрение зависимостей
↗
19.
Обработчик вывода списка контактов
↗
20.
Главный цикл и обработка команд CLI
↗
21.
Точка входа и инициализация приложения
↗
22.
CLI: создание контакта с вводом данных
↗
23.
Обработчик выхода с сохранением данных
↗
24.
Тестирование функции выхода
↗
25.
Техническое задание #12
↗
Параллелизм и конкурентность
11 уроков
1.
Горутины: первые шаги
↗
2.
Стек вызовов горутин и управление runtime
↗
3.
Каналы как основы синхронизации горутин
↗
4.
Буферизованные каналы
↗
5.
Обработка ошибок в горутинах
↗
6.
Альтернативная обработка ошибок
↗
7.
Примитив синхронизации горутин
↗
8.
Защита общих данных
↗
9.
Практика
↗
10.
Deadlock — взаимная блокировка горутин
↗
11.
Самостоятельная работа
↗
Не SOLID
1 урок
1.
Принципы, которые делают код лучше
↗
Жизнь без ООП
6 уроков
1.
Factory
↗
2.
Builder
↗
3.
Prototype
↗
4.
Singleton
↗
5.
Adapter
↗
6.
Дополнение
↗
Управление зависимостями
1 урок
1.
Подключение сторонних библиотек
↗
RESTful API: обзор фундаментальных концепций
2 урока
1.
Теория ключевых аспектов
↗
2.
Есть вопросик...
↗
SQL и СУБД: SQLite, введение в теорию хранения данных
19 уроков
1.
Зачем нужны базы данных
↗
2.
Установка и настройка окружения для работы с SQLite
↗
3.
Основные концепции структуры базы данных
↗
4.
Отношения в базе данных
↗
5.
Что такое SQL и система типов
↗
6.
Создание таблиц
↗
7.
Ограничения SQL
↗
8.
Добавление записей
↗
9.
Самостоятельная работа: наполнение данными
↗
10.
Выборка данных
↗
11.
Фильтрация данных
↗
12.
Оператор обновления данных
↗
13.
Самостоятельная работа на обновление данных
↗
14.
Оператор удаления данных
↗
15.
Самостоятельная работа: создание и наполнение базы данных
↗
16.
Сложные концепции
↗
17.
Самостоятельная работа на сложные запросы
↗
18.
Сложные запросы
↗
19.
Самостоятельная работа на объединение
↗
Полноценный REST API с JWT‑аутентификацией
28 уроков
1.
Базовый HTTP-сервер
↗
2.
Модель Contact
↗
3.
Инициализация SQLite и миграции
↗
4.
Репозиторий контактов
↗
5.
Сервис контактов
↗
6.
HTTP-обработчик создания контакта
↗
7.
Интеграция слоя контактов
↗
8.
Рефакторинг
↗
9.
Валидация и уникальность
↗
10.
Валидация по-взрослому
↗
11.
GET-запрос получения всех контактов
↗
12.
GET-запрос получение контакта по ID
↗
13.
Мягкое удаление контакта (Soft Delete)
↗
14.
Техническое задание
↗
15.
Модель пользователя и структура аутентификации
↗
16.
Таблица в базе данных
↗
17.
Заготовка слоя регистрации
↗
18.
Регистрация пользователя
↗
19.
Хеширование паролей
↗
20.
Аутентификация и проверка пароля
↗
21.
JWT-токены: Claims и JWTService
↗
22.
Генерация JWT при успешной авторизации
↗
23.
Окружение
↗
24.
JWT Middleware для защиты эндпоинтов
↗
25.
Поддержка Bearer-токенов
↗
26.
Проверка владельца при удалении
↗
27.
Проверка владельца при обновлении
↗
28.
Перспективы развития
↗
Описание проекта
1 урок
1.
Что будем делать
↗
Что нас ждёт на собеседовани
1 урок
1.
Практические рекомендации
↗
Каталог товаров
43 урока
1.
🗃️ 001 Введение в проект
↗
2.
🗃️ 002 Инициализация Go-модуля и Gin-сервер
↗
3.
🗃️ 003 Доменные сущности: BaseEntity, Brand, Category, CatalogI
↗
4.
🗃️ 004 Docker Compose и PostgreSQL
↗
5.
🗃️ 005 SQL-миграции и seed-данные
↗
6.
🗃️ 006 Репозиторий брендов (PostgreSQL)
↗
7.
🗃️ 007 Query handler: получение брендов
↗
8.
🗃️ 008 HTTP handler: эндпоинт брендов
↗
9.
🗃️ 009 Маршрутизация API v1: /brands
↗
10.
🗃️ 010 Конфигурация через .env и godotenv
↗
11.
🗃️ 011.1 [ТЗ] Самостоятельная работа
↗
12.
🗃️ 011.2 Эндпоинт /categories: полный цикл
↗
13.
🗃️ 012 Репозиторий товаров с JOIN
↗
14.
🗃️ 013 Query handler: список товаров
↗
15.
🗃️ 014 HTTP handler: список товаров
↗
16.
🗃️ 015 Маршрут /catalog-items
↗
17.
🗃️ 016 Рефакторинг SQL-запросов
↗
18.
🗃️ 017 Репозиторий: получение товара по ID
↗
19.
🗃️ 018 Query handler: товар по ID
↗
20.
🗃️ 019 HTTP handler: товар по ID
↗
21.
🗃️ 020 Маршрут /catalog-items/
↗
22.
🗃️ 021 Поиск по названию (ILIKE)
↗
23.
🗃️ 022 Query handler: поиск по названию
↗
24.
🗃️ 023 HTTP handler: поиск по названию
↗
25.
🗃️ 024 Маршрут /catalog-items/title/:title
↗
26.
🗃️ 025 Репозиторий: создание товара (INSERT)
↗
27.
🗃️ 026 Command handler: создание товара
↗
28.
🗃️ 027 HTTP handler: POST-запрос
↗
29.
🗃️ 028 Маршрут POST /catalog-items
↗
30.
🗃️ 029 Репозиторий: обновление товара (UPDATE)
↗
31.
🗃️ 030 Command handler: обновление товара
↗
32.
🗃️ 031 HTTP handler: PUT-запрос
↗
33.
🗃️ 032 Маршрут PUT /catalog-items
↗
34.
🗃️ 033 [ТЗ] Удаление товара
↗
35.
🗃️ 034 [ТЗ] Поиск по бренду
↗
36.
🗃️ 035 Пагинация: Pagination и QueryArgs
↗
37.
🗃️ 036 Фильтрация и сортировка: введение
↗
38.
🗃️ 037 Query handler: пагинация (V2)
↗
39.
🗃️ 038 HTTP handler: пагинация (V2)
↗
40.
🗃️ 039 Маршрут GET /v2/catalog-items, тестирование пагинации
↗
41.
🗃️ 040 Автомиграции при старте (golang-migrate)
↗
42.
🗃️ 041 Финал каталога и итоговые правки
↗
43.
🗃️ Саморефлексия
↗
Корзина покупок
23 урока
1.
🗑️ 042 PostgreSQL для Basket в Docker Compose
↗
2.
🗑️ 043 Gin-сервер и health-check для Basket
↗
3.
🗑️ 044 Миграции Basket и автозапуск
↗
4.
🗑️ 045 Доменные модели: ShoppingCart, ShoppingCartItem
↗
5.
🗑️ 046 Репозиторий: сохранение корзины (транзакция)
↗
6.
🗑️ 047 Command handler: сохранение корзины
↗
7.
🗑️ 048 HTTP handler: POST /cart
↗
8.
🗑️ 049 Маршрутизация API v1: /cart
↗
9.
🗑️ 050 Инициализация слоёв и DI
↗
10.
🗑️ 051 Валидация моделей (go-playground/validator)
↗
11.
🗑️ 052 Middleware: централизованная обработка ошибок
↗
12.
🗑️ 053 Интеграция ErrorHandlerMiddleware
↗
13.
🗑️ 054 Репозиторий: получение корзины
↗
14.
🗑️ 055 Query handler: получение корзины
↗
15.
🗑️ 056 HTTP handler: GET /cart/:accountName
↗
16.
🗑️ 057 Маршрут GET /cart/:accountName
↗
17.
🗑️ 058 Кастомный тип NotFoundError
↗
18.
🗑️ 059 [ТЗ] Удаление корзины
↗
19.
🗑️ 060 Redis-контейнер для кэширования
↗
20.
🗑️ 061 RedisCartRepository
↗
21.
🗑️ 062 Интеграция Redis
↗
22.
🗑️ 063 Dockerfile и compose-prod для Basket
↗
23.
🗑️ Саморефлексия
↗
Окончание
1 урок
1.
Итоги
↗
Промоакции
31 урок
1.
🏷️ 064 MySQL-контейнер для Promotion
↗
2.
🏷️ 065 Подключение к MySQL и автомиграции
↗
3.
🏷️ 066 Миграция: таблица promos и seed-данные
↗
4.
🏷️ 067 Protocol Buffers: greet.proto и кодогенерация
↗
5.
🏷️ 068 Реализация GreeterService (gRPC)
↗
6.
🏷️ 069 gRPC-сервер с graceful shutdown
↗
7.
🏷️ 070 gRPC Reflection и тестирование
↗
8.
🏷️ 071.1 gRPC метод Add (практика)
↗
9.
🏷️ 071.2 Proto-контракт
↗
10.
🏷️ 072 Доменная модель
↗
11.
🏷️ 073 Интерфейс PromotionRepository
↗
12.
🏷️ 074 Реализация FindByCatalogItem
↗
13.
🏷️ 075 Реализация обработчика promotion/queries
↗
14.
🏷️ 076 gRPC-сервис PromoService: заглушка
↗
15.
🏷️ 077 Реализация GetPromoByCatalogItem
↗
16.
🏷️ 078 Интеграция PromoService в main
↗
17.
🏷️ 079 Proto: CreatePromo RPC
↗
18.
🏷️ 080 Репозиторий: вставка промоакции
↗
19.
🏷️ 081 Command handler: создание промоакции
↗
20.
🏷️ 082 gRPC эндпоинт CreatePromo
↗
21.
🏷️ 083 Интеграция CreatePromoHandler и DI
↗
22.
🏷️ 084 Unique-ограничение и обработка дубликатов
↗
23.
🏷️ 085 UpdatePromo: полный цикл
↗
24.
🏷️ 086 [ТЗ] Удаление промоакции
↗
25.
🏷️ 087 gRPC-клиент в SaveCartHandler: применение скидок
↗
26.
🏷️ 088 Интеграция gRPC-клиента в Basket
↗
27.
🏷️ 089 Dockerfile и compose-prod для Promotion
↗
28.
🏷️ 090.1 Проблема: БД не готова при старте
↗
29.
🏷️ 090.2 Утилита WaitForDB с retry-логикой
↗
30.
🏷️ 091 Интеграция WaitForDB во все сервисы
↗
31.
🏷️ Саморефлексия
↗
Оформление заказов
25 уроков
1.
🚚 092 PostgreSQL для Checkout и миграции
↗
2.
🚚 093 Конфигурация и запуск миграций
↗
3.
🚚 094 Gin-сервер и health-check для Checkout
↗
4.
🚚 095 Доменная модель: Order, Value Objects, Enums
↗
5.
🚚 096 Интерфейс и реализация OrderRepository
↗
6.
🚚 097 Репозиторий: получение заказа с позициями
↗
7.
🚚 098 Репозиторий: поиск заказов по аккаунту
↗
8.
🚚 099 Репозиторий: создание заказа (транзакция)
↗
9.
🚚 100 Query handler: заказ по ID
↗
10.
🚚 101 HTTP handler: GET /orders/:id
↗
11.
🚚 102 Маршрут и DI для Checkout
↗
12.
🚚 103 [ТЗ] Заказы по аккаунту
↗
13.
🚚 104 RabbitMQ-контейнер в Docker Compose
↗
14.
🚚 105 Структура messaging: заготовки
↗
15.
🚚 106 BaseIntegrationEvent и OrderSubmittedEvent
↗
16.
🚚 107 RabbitMQ Publisher: exchange, queue, publish
↗
17.
🚚 108 Command handler: CheckoutCart и публикация события
↗
18.
🚚 109 HTTP handler: POST /cart/checkout
↗
19.
🚚 110 Маршрут checkout и интеграция RabbitMQ
↗
20.
🚚 111 RabbitMQ Consumer: подключение и обработка
↗
21.
🚚 112 ProcessOrderSubmissionHandler: создание заказа
↗
22.
🚚 113 OrderSubmittedConsumer: маппинг события в команду
↗
23.
🚚 114 Интеграция consumer в Checkout с graceful shutdown
↗
24.
🚚 115 Dockerfile и compose-prod для Checkout
↗
25.
🚚 Саморефлексия
↗
Мониторинг и инфраструктура
16 уроков
1.
📊 116.1 Введение в Prometheus и Grafana
↗
2.
📊 116.2 Пакет metrics: HTTP, gRPC, DB, RabbitMQ
↗
3.
📊 117 Gin Middleware для Prometheus-метрик
↗
4.
📊 118 gRPC-интерцепторы метрик
↗
5.
📊 119 Метрики в Catalog-сервисе
↗
6.
📊 120 Метрики в Promotion-сервисе
↗
7.
📊 121 Конфигурация Prometheus (prometheus.yml)
↗
8.
📊 122 Datasource Grafana для Prometheus
↗
9.
📊 123 Prometheus и Grafana в compose-prod
↗
10.
📊 124.1 Демо: дашборды Prometheus и Grafana
↗
11.
📊 124.2 Grafana-дашборды: Catalog и Promotion
↗
12.
📊 125 Нагрузочное тестирование с k6 (HTTP)
↗
13.
📊 126 Тюнинг пула соединений PostgreSQL
↗
14.
📊 127 k6: нагрузочный тест gRPC
↗
15.
📊 128 Portainer: управление контейнерами
↗
16.
📊 Саморефлексия
↗