Курс на 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 для сеньоров» ↗