Курс на Stepik
Обложка курса «Go для мидлов» на Stepik
500 ₽

Go для мидлов 5.000

Открыть на
STEPIK.ORG

Go для middle: композиция, интерфейсы, ошибки, горутины, каналы, context, синхронизация, тесты, PostgreSQL, HTTP, JSON, slog и итоговый сервис.

Показатель Текущие показатели Рост
Значение 🏆 Рейтинг 3 дн 7 дн 30 дн
Количество учеников на курсе «Go для мидлов»Учеников на курсе 35
Сертификаты, выданные на курсе «Go для мидлов»Сертификатов выдано 0
Отзывы о курсе «Go для мидлов»Отзывов получено 1
Рейтинг курса «Go для мидлов»Рейтинг курса 5.000
Уроки в курсе «Go для мидлов»Количество уроков 139
Тесты в курсе «Go для мидлов»Количество квизов 597
Время прохождения курса «Go для мидлов»Время прохождения курса
Стоимость курса «Go для мидлов»Стоимость курса 500 ₽
Обновления курса «Go для мидлов»Обновления курса
Дата публикации курса «Go для мидлов»Дата публикации курса
Последнее обновление курса «Go для мидлов»Последнее обновление
Сложность normal

Содержание курса

Разделы в курсе «Go для мидлов» 20 разделов Уроки в курсе «Go для мидлов» 139 уроков Тесты в курсе «Go для мидлов» 597 тестов Время прохождения курса «Go для мидлов» 0 ч. Последнее обновление курса «Go для мидлов» обн. 16 июля 2026

Модуль 1. Введение: от джуна к продуктивному мидлу

6 уроков
1. О курсе: как проходить обучение и канал «Логово Дата-Инженера»
2. Чем мидл на Go отличается от джуна: не только «больше кода»
3. Краткая ревизия базы: типы, функции, срезы и карты на одном…
4. Ещё одна ревизия: интерфейсы, методы и обработка ошибок в…
5. Как устроен этот курс и как с ним работать
6. Обновляем инструменты: go vet, staticcheck, golangci-lint

Модуль 2. Композиция и встраивание

7 уроков
1. Композиция против наследования: почему в Go нет классов, и…
2. Встраивание структур: поле без имени продвигает свои методы и…
3. Продвижение методов: встроенный тип делится поведением
4. Переопределение методов при встраивании: «теневое» замещение
5. Встраивание интерфейсов: собираем большой контракт из маленьких
6. Множественное встраивание: несколько типов в одной структуре
7. Когда встраивание уместно, а когда лучше явное поле

Модуль 3. Интерфейсы глубоко

9 уроков
1. Интерфейс как значение: два слова под капотом — тип и…
2. nil-интерфейс против nil-указателя в интерфейсе: классическая…
3. Принимай интерфейсы, возвращай конкретные типы: главный…
4. Маленькие интерфейсы: один-три метода вместо мегаконтракта
5. Паттерн Reader: один метод Read — и весь мир открыт
6. Интерфейсы для тестирования: подменяем реальные зависимости…
7. Множественное удовлетворение: один тип может реализовать…
8. Интерфейсы из стандартной библиотеки: io.Closer…
9. Свои интерфейсы: как проектировать контракт под задачу, а не…

Модуль 4. Обработка ошибок по-взрослому

7 уроков
1. Вспоминаем error, errors.New и fmt.Errorf
2. Сентинел-ошибки: var ErrNotFound = errors.New(...) и errors.Is
3. Кастомный тип ошибки с контекстом: что пошло не так и где
4. Оборачивание цепочек: fmt.Errorf с %w и errors.Unwrap
5. errors.Is и errors.As в глубину: как ходить по цепочке ошибок
6. errors.Join: объединяем несколько ошибок в одну
7. Стратегия обработки: где логировать, где оборачивать, а где…

Модуль 5. Горутины

8 уроков
1. Горутина: ключевое слово go и функция, летящая в фоне
2. Чем горутина отличается от потока ОС: стек в 2 КБ и…
3. Планировщик Go: G-M-P модель простыми словами
4. Горутины — не потоки: тысячи горутин не равны тысяче потоков
5. Дочерние горутины и время жизни: кто кого переживёт
6. Утечка горутин: как забытая горутина съедает память
7. runtime.NumGoroutine: смотрим, сколько горутин работает
8. Практика: запускаем горутины и убеждаемся, что main их не ждёт

Модуль 6. Каналы

8 уроков
1. Канал: типизированная труба между горутинами через make(chan T)
2. Отправка и получение: оператор <- и блокирующая природа каналов
3. Небуферизованные каналы: синхронная передача — отправитель…
4. Буферизованные каналы: асинхронная ёмкость фиксированного…
5. Закрытие канала: close и что меняется для получателя
6. for range по каналу и comma ok: читаем, пока открыт, и…
7. Однонаправленные каналы: chan<- и <-chan в сигнатурах функций
8. select: ждём несколько каналов одновременно, как switch для…

Модуль 7. Паттерны конкурентности

9 уроков
1. Pipeline: цепочка горутин, соединённых каналами — этап за этапом
2. Fan-out: один входной канал, много рабочих горутин
3. Fan-in: сливаем несколько каналов в один
4. Паттерн generator: функция возвращает канал с данными
5. Timeout через time.After и select
6. Done-канал: вежливая отмена горутины
7. Пул воркеров: фиксированное число горутин обрабатывает…
8. Ошибки в горутинах: как передать ошибку через канал ошибок
9. Практика: собираем конкурентный пайплайн обработки данных

Модуль 8. Синхронизация

8 уроков
1. sync.Mutex: взаимное исключение для защиты общих данных
2. sync.RWMutex: много читателей или один писатель
3. sync.WaitGroup: ждём группу горутин
4. sync.Once: выполняем код ровно один раз, даже при…
5. sync.Pool: временное хранилище для переиспользования объектов
6. sync/atomic: атомарные операции без мьютекса
7. sync.Map: конкурентная карта для особых случаев
8. Cond, ErrGroup и другие: обзор продвинутых примитивов

Модуль 9. Дженерики глубоко

7 уроков
1. Вспоминаем синтаксис: тип-параметры, квадратные скобки и…
2. Пакет constraints и встроенные ограничения: any, comparable…
3. Ограничение типа через интерфейс: T может быть любым типом с…
4. Тильда ~ в ограничениях: разрешаем именованные типы с той же…
5. Дженерики в структурах: обобщённый кэш, стек, дерево
6. Дженерики и производительность: мономорфизация или…
7. Когда дженерики избыточны: интерфейсы часто решают задачу проще

Модуль 10. Тестирование глубоко

8 уроков
1. Table-driven tests: лучшая практика и организация тестовых…
2. Подтесты t.Run с параллельным выполнением: t.Parallel
3. TestMain: общая подготовка и очистка для всего тестового пакета
4. Временные файлы и директории: t.TempDir для изолированных тестов
5. Золотые файлы (golden files): сравниваем вывод с эталоном
6. Заглушки и моки через интерфейсы: подменяем зависимости для…
7. Интеграционные тесты с build-тегами и отдельной папкой
8. Бенчмарки: Benchmark-функции и go test -bench

Модуль 11. Контекст и отмена

6 уроков
1. Контекст как стандартный способ отмены операций
2. context.Background и context.TODO: корневые контексты
3. context.WithCancel: создаём отменяемый контекст
4. context.WithTimeout и WithDeadline: автоматическая отмена по…
5. context.WithValue: передаём значения через контекст и когда…
6. Контекст в горутинах: передаём отмену по цепочке

Модуль 12. Базы данных

7 уроков
1. database/sql: общий интерфейс для SQL-баз в Go
2. Подключаем драйвер PostgreSQL через pgx
3. Открываем соединение: sql.Open, пул соединений и Ping
4. Exec и Query: выполняем запросы и читаем результаты
5. sql.Rows и sql.Row: перебор строк и сканирование в структуру
6. Транзакции: Begin, Commit и Rollback
7. Миграции через goose или golang-migrate: управляем схемой базы

Модуль 13. HTTP-сервер

9 уроков
1. net/http: стандартная библиотека, которой достаточно
2. Обработчик (handler): функция с сигнатурой http.HandlerFunc
3. Мультиплексор: http.ServeMux и регистрация маршрутов
4. Методы HTTP: различаем GET, POST, PUT, DELETE в одном…
5. Чтение query-параметров, заголовков и тела запроса
6. Формирование ответа: статус-коды, заголовки и тело
7. Middleware: оборачиваем обработчики для логирования…
8. Graceful shutdown: вежливо останавливаем сервер через контекст
9. Структура проекта: handlers, services, repositories —…

Модуль 14. JSON, XML и сериализация

6 уроков
1. encoding/json: marshal и unmarshal в деталях
2. Структурные теги json: переименование, omitempty, игнорирование
3. Кастомный marshaling: реализуем json.Marshaler и…
4. Работа с динамическим JSON: json.RawMessage и…
5. Потоковый JSON: json.Encoder и json.Decoder для больших объёмов
6. encoding/xml: обзор работы с XML-документами

Модуль 15. Логирование и конфигурация

5 уроков
1. log/slog: структурированное логирование в стандартной…
2. Атрибуты и уровни логирования: Info, Warn, Error, Debug
3. Обработчики slog: текстовый и JSON-вывод
4. Конфигурация через переменные окружения: os.Getenv и…
5. Конфигурационные файлы: YAML через gopkg.in/yaml.v3

Модуль 16. Рефлексия

5 уроков
1. reflect.Type и reflect.Value: два главных типа пакета reflect
2. Получаем reflect.Type от переменной и от литерала
3. Обход полей структуры через рефлексию
4. Вызов метода по имени через reflect
5. reflect.DeepEqual: глубокое сравнение любых значений

Модуль 17. Модули и зависимости продвинуто

5 уроков
1. go.mod глубже: require, replace, exclude и indirect-зависимости
2. Семантическое версионирование на практике: мажор, минор, патч
3. Работа с несколькими модулями в одном репозитории
4. Приватные модули: GOPRIVATE и доступ к внутренним репозиториям
5. Вендоринг: go mod vendor для фиксации зависимостей в проекте

Модуль 18. Продвинутые инструменты

5 уроков
1. golangci-lint: сотни линтеров в одном запуске
2. go vet: встроенный статический анализ от команды Go
3. staticcheck: продвинутый анализ кода за пределами go vet
4. pprof и go tool trace: профилируем CPU, память и горутины
5. go generate: автоматическая кодогенерация в проекте

Модуль 19. Паттерны в Go

7 уроков
1. Functional options: конфигурируем объекты элегантно
2. Паттерн Repository: абстрагируем доступ к данным за интерфейсом
3. Паттерн Worker pool: переиспользуем горутины через канал задач
4. Circuit Breaker: защищаемся от каскадных отказов
5. Retry с exponential backoff: повторяем операции с умом
6. Rate limiting через time.Ticker: ограничиваем частоту операций
7. Graceful degradation: сервис продолжает работать частично, а…

Модуль 20. Итоговый проект: HTTP-сервис менеджера задач

7 уроков
1. Проект: архитектура сервиса — handlers, services, repository
2. Модель данных и интерфейсы: проектируем контракты
3. Реализуем хранение: PostgreSQL через pgx и паттерн Repository
4. HTTP API: CRUD-обработчики с JSON и кодами ответа
5. Middleware: логирование, паника-recovery и контекст
6. Тесты: юнит-тесты с моками, интеграционные с тестовой базой
7. Куда двигаться дальше: анонс курса «Go для сеньоров»