Подробнее
Что нужно для старта
- Базовое понимание программирования (переменные, циклы, функции). Если вы никогда не писали код, первый бесплатный модуль поможет влиться, но опыт на любом другом языке (Python, JS, C++) сильно ускорит прогресс.
- Умение гуглить, читать логи ошибок и работать с документацией.
- Базовое понимание сетей (что такое HTTP, TCP/IP, REST) будет плюсом, но мы разберем необходимые концепции в рамках курса.
- Английский язык на уровне чтения технической документации и комментариев на GitHub.
Что вы получите
- Писать идиоматичный и производительный код на Go, понимая, как устроены базовые структуры данных под капотом (слайсы, мапы, интерфейсы).
- Проектировать архитектуру приложений с использованием паттернов асинхронности (worker pool, pipeline, circuit breaker, pub/sub).
- Анализировать сложность алгоритмов (Big O) и избегать скрытых утечек памяти.
- Разрабатывать профессиональные CLI-утилиты и TUI-приложения с богатым пользовательским опытом (cobra, viper).
- Создавать надежные HTTP-серверы и клиенты, грамотно обрабатывать ошибки, таймауты и отмены запросов через context.
- Работать с конкурентностью на профессиональном уровне: использовать sync, atomic, горутины и каналы без гонок данных (data race).
- Интегрировать базы данных (PostgreSQL через pgx/sqlc) и писать безопасные SQL-запросы.
- Обеспечивать качество кода: писать юнит- и интеграционные тесты, настраивать линтеры и документацию.
- Профилировать приложения с помощью pprof, разбираться в работе сборщика мусора (GC) и оптимизировать узкие места.
- Применять современный Go: использовать дженерики и итераторы для создания переиспользуемых компонентов.
Для кого этот курс
- Сегменты целевой аудитории:
- Начинающие разработчики, которые хотят войти в бэкенд сразу с востребованным стеком и не тратить годы на изучение устаревших подходов.
- Бэкендеры на Python, PHP, Java или Node.js, которым нужно выучить Go для перехода в микросервисную архитектуру и HighLoad-проекты.
- Middle Go-разработчики, которые чувствуют пробелы в фундаментальных знаниях (работа рантайма, GC, устройство планировщика) и хотят систематизировать опыт, чтобы претендовать на позиции Senior.
- Жизненные ситуации, когда курс особенно полезен:
- Вы устали от медленных скриптов и высокого потребления памяти на Python/Node.js и хотите писать быстрые бинарники.
- Вам поручили лидить новый микросервис на Go, но вы знаете только базу и боитесь заложить архитектурные ошибки.
- Вас завалили на техническом интервью вопросами про утечки в горутинах, устройство sync.Map или нюансы работы context.
Программа курса
- Что такое программа курсов
- О курсе
- Что нужно сделать
- Про Golang
- Установка Golang
- Установка редактора кода
- Первая программа
- Запуск и компиляция
- Отладка
- Переменные
- Названия переменных
- Типы
- Тип int
- Переполнение и приведение типов int
- Типы byte и rune
- Выбор int
- Система счисления
- iota
- Случайное целое число
- Тип float
- Случайное дробное число
- Тип complex
- Пакет math
- Тип bool
- Тип string
- Пакет strings
- Приведение в строку
- Приведение строки в число
- Пакет fmt
- Спецификаторы f-функций
- Тип rune
- Указатели
- nil и new
- Ввод данных от пользователя
- Тип any или interface{}
- Другие типы
- Операторы и операнды
- Математические операторы
- Операторы присваивания
- Конкатенация
- Сравнение
- Логические операторы
- Логические "И", "ИЛИ"
- Побитовые операторы
- Пример побитовых операторов
- Логические конструкции if-else
- Логическое if с присвоением значения
- Конструкция switch
- Область видимости
- Практика - Определение времени суток
- Практика - Калькулятор ИМТ
- Практика - Поиск по названию товара
- Создание функций
- Параметры
- Возвращение значений
- Именованный return
- Применение return
- Вариативный параметр
- Указатели и функции
- defer
- Нюансы defer
- Стек вызовов - callstack
- Паника!!!
- Ошибки
- Оборачивание ошибок
- Замыкания
- Пользовательские типы
- Инициализация с init
- Рекурсия
- Практикуемся с рекурсией - факториал
- Стиль функций
- Одна функция - одна задача
- if, else и return
- Затенение переменных
- Имена функций
- Практика - Система оценок
- Практика - Декораторы
- Пакеты в golang
- Внешние пакеты и их подключение
- Советы по пакетам
- Цикл for
- Итерация по строкам
- break, continue и return
- Вложенные циклы и лейблы
- Практика - Игра "Угадай число"
- Практика - Анализ текста
- Создание массивов
- Доступ к значениям массивов
- Итерация по массиву
- Массивы и функции
- Сравнение массивов
- Практика - Секретный код
- Создание слайсов
- Итерация по слайсу
- Просто про добавление значений - append()
- Вариативные параметры функции
- Пустой слайс - nil
- Вложенные массивы и слайсы
- Копирование - copy
- Подслайсы
- Указатель на элемент
- Вставка значений - append()
- Удаление значений
- Нюансы работы со слайсами
- Сортировка
- Пакет slices
- Практика - шифр Цезаря
- Практика - Отслайси его!
- Создание map
- Итерация по map
- Изменение map во время итерации
- Ключи
- Значения
- Скорость работы
- Пример использования map
- Сравнение map
- Копирование и клонирование
- Удаление значений с maps.DeleteFunc()
- Практика - рекомендации фильмов
- Практика - анализ друзей
- Проблема хранения данных
- Структуры
- Вложенные структуры
- Передача по значению
- Методы
- Изменение структуры в методах
- Экспортируемость полей и методов
- Функция-конструктор
- Теги
- Композиция
- Встраивание
- Композиция vs встраивание
- Пустая структура
- Практика - система управления тегами
- Практика - система управления проектами
- Создание интерфейсов
- Пример использования
- Тип any или пустой интерфейс
- nil
- Вызов метода у nil
- Пользовательские типы
- Пример использования пользовательских типов
- Сложнее пример с интерфейсами
- Встраивание интерфейсов
- Практика - Симуляция жизни в деревне
- Вспоминаем про ошибки
- Оборачивание ошибок
- Пользовательские ошибки
- Функции errors.Is() и errors.As()
- Как устроены errors.Is() и errors.As()
- Оборачивание пользовательских ошибок
- Другой подход к работе с ошибками
- Советы по работе с ошибками
- Практика - Обработка ошибок платежа
- Введение
- Структура слайса
- Как работает append()
- Нюансы append()
- Подслайсы
- Неожиданные мутации
- Сложность операций: Big O
- Как данные хранятся в памяти?
- Практика: Угадай сложность
- Проблема поиска
- Придумываем хеш-таблицу
- Коллизии
- Создаем свою хеш-таблицу
- Заключение
- Введение
- Идея swiss tables
- hash
- Каталог и расширяемое хеширование
- Таблицы (Swiss tables)
- Группы
- Поиск элемента и пробирование
- CRUD в map
- Нюансы map
- Заключение
- Устройство интерфейсов
- Таблицы методов (itab)
- Интерфейсы, nil и производительность
- Использование интерфейсов
- Основы времени
- Арифметика времени
- Форматирование и парсинг времени
- Временные зоны
- Monotonic и Wall Time
- Таймеры и задержки
- DST, високосные секунды и другие подводные камни
- Введение в работу с файлами
- Ручное управление файлом
- Операции с *os.File
- Пример: чтение конфигурации
- Работа с большими файлами
- bufio
- Реализуем логику head
- Пути и работа с директориями
- Directory (Path) Traversal
- Рекурсивный обход файловой системы
- Права доступа, метаданные и временные файлы
- Атомарная запись
- Практика: реализуем tail
- Стандартные операции над файлами
- Что такое JSON
- Основы JSON
- omitempty и omitzero
- MarshalJSON и UnmarshalJSON
- Вложенные структуры, слайсы, мапы
- Динамический JSON
- Валидация в UnmarshalJSON
- Streaming и работа с большими данными
- Циклические ссылки
- encoding/json/v2
- stepik
- Горутины и GMP
- Как устроен GMP
- Горутины
- Каналы
- Нюансы каналов
- Практика с каналами
- select
- Таймеры и таймауты
- Введение в контекст
- Отмена контекста
- Передача контекста вниз по стеку
- Причина - context.Cause
- Пример: длинные вычисления с проверкой контекста
- Работа с сигналами
- Graceful shutdown
- Введение в пакет sync
- sync.Mutex
- sync.RWMutex
- sync.WaitGroup
- sync.Once
- sync.Cond
- sync.Map
- sync.Pool
- errgroup
- Что выбрать?
- Атомарные операции
- Пример: Флаг отмены для воркеров
- Атомарное обновление структуры - atomic.Pointer
- Когда нельзя использовать атомарные операции
- Заключение
- Graceful shutdown
- Pipeline
- Worker Pool
- Fan-Out/Fan-In
- Resource Pool
- Circuit Breaker
- Rate Limiting
- Pub/Sub
- Prioritized Select
- Семафор
- Идемпотентный закрыватель каналов
- Паттерны And и Or
- Неблокирующая передача данных
- Window Buffer
- Паттерн Мост (Bridge)
- Динамический Fan-In
- Паттерн First-Of
- Singleflight
- Собственный errgroup
- Паттерн Барьер
- Мини-оркестратор с откатом
- Worker Pool с динамическим масштабированием
- Диспетчер нетраннера
- Введение в CLI-приложения
- Цветной вывод и индикаторы прогресса
- Стандартный пакет flag
- Пакет pflag
- Библиотека urfave/cli
- Библиотека Cobra и Viper
- Интерактивные режимы (REPL)
- Введение в HTTP как протокол
- Уровни сетевого взаимодействия: OSI
- Эволюция HTTP
- Stateless-природа HTTP
- Основы HTTP-сервера
- Регистрация обработчиков
- Запуск сервера
- Заполнение обработчиков
- Добавляем log/slog
- Роутер
- Роутинг в http.ServeMux
- Убираем глобальный логгер
- Middleware
- Context и цепочки middleware
- Настройка HTTP-сервера
- Чтение данных из HTTP-запроса
- Раздача статических файлов
- Загрузка файлов
- Множественная загрузка файлов
- Заключение
- Простые запросы HTTP
- http.Client
- http.Transport
- Диагностика сетевых ошибок
- http.Request
- Что дальше?
01Как начать учиться
- Что такое программа курсов
02Go [1.1] Введение
- О курсе
- Что нужно сделать
- Про Golang
- Установка Golang
- Установка редактора кода
- Первая программа
- Запуск и компиляция
- Отладка
03Go [1.2] Базовые типы
- Переменные
- Названия переменных
- Типы
- Тип int
- Переполнение и приведение типов int
- Типы byte и rune
- Выбор int
- Система счисления
- iota
- Случайное целое число
- Тип float
- Случайное дробное число
- Тип complex
- Пакет math
- Тип bool
- Тип string
- Пакет strings
- Приведение в строку
- Приведение строки в число
- Пакет fmt
- Спецификаторы f-функций
- Тип rune
- Указатели
- nil и new
- Ввод данных от пользователя
- Тип any или interface{}
- Другие типы
04Go [1.3] Операторы
- Операторы и операнды
- Математические операторы
- Операторы присваивания
- Конкатенация
- Сравнение
- Логические операторы
- Логические "И", "ИЛИ"
- Побитовые операторы
- Пример побитовых операторов
05Go [1.4] Ветвления
- Логические конструкции if-else
- Логическое if с присвоением значения
- Конструкция switch
- Область видимости
- Практика - Определение времени суток
- Практика - Калькулятор ИМТ
- Практика - Поиск по названию товара
06Go [1.5] Функции
- Создание функций
- Параметры
- Возвращение значений
- Именованный return
- Применение return
- Вариативный параметр
- Указатели и функции
- defer
- Нюансы defer
- Стек вызовов - callstack
- Паника!!!
- Ошибки
- Оборачивание ошибок
- Замыкания
- Пользовательские типы
- Инициализация с init
- Рекурсия
- Практикуемся с рекурсией - факториал
- Стиль функций
- Одна функция - одна задача
- if, else и return
- Затенение переменных
- Имена функций
- Практика - Система оценок
- Практика - Декораторы
07Go [1.6] Пакеты
- Пакеты в golang
- Внешние пакеты и их подключение
- Советы по пакетам
08Go [1.7] Циклы
- Цикл for
- Итерация по строкам
- break, continue и return
- Вложенные циклы и лейблы
- Практика - Игра "Угадай число"
- Практика - Анализ текста
09Go [1.8] Массивы
- Создание массивов
- Доступ к значениям массивов
- Итерация по массиву
- Массивы и функции
- Сравнение массивов
- Практика - Секретный код
10Go [1.9] Слайсы
- Создание слайсов
- Итерация по слайсу
- Просто про добавление значений - append()
- Вариативные параметры функции
- Пустой слайс - nil
- Вложенные массивы и слайсы
- Копирование - copy
- Подслайсы
- Указатель на элемент
- Вставка значений - append()
- Удаление значений
- Нюансы работы со слайсами
- Сортировка
- Пакет slices
- Практика - шифр Цезаря
- Практика - Отслайси его!
11Go [1.10] Структура map
- Создание map
- Итерация по map
- Изменение map во время итерации
- Ключи
- Значения
- Скорость работы
- Пример использования map
- Сравнение map
- Копирование и клонирование
- Удаление значений с maps.DeleteFunc()
- Практика - рекомендации фильмов
- Практика - анализ друзей
12Go [1.11] Структуры
- Проблема хранения данных
- Структуры
- Вложенные структуры
- Передача по значению
- Методы
- Изменение структуры в методах
- Экспортируемость полей и методов
- Функция-конструктор
- Теги
- Композиция
- Встраивание
- Композиция vs встраивание
- Пустая структура
- Практика - система управления тегами
- Практика - система управления проектами
13Go [1.12] Интерфейсы
- Создание интерфейсов
- Пример использования
- Тип any или пустой интерфейс
- nil
- Вызов метода у nil
- Пользовательские типы
- Пример использования пользовательских типов
- Сложнее пример с интерфейсами
- Встраивание интерфейсов
- Практика - Симуляция жизни в деревне
14Go [1.13] Ошибки
- Вспоминаем про ошибки
- Оборачивание ошибок
- Пользовательские ошибки
- Функции errors.Is() и errors.As()
- Как устроены errors.Is() и errors.As()
- Оборачивание пользовательских ошибок
- Другой подход к работе с ошибками
- Советы по работе с ошибками
- Практика - Обработка ошибок платежа
15Go [2.1] Слайсы
- Введение
- Структура слайса
- Как работает append()
- Нюансы append()
- Подслайсы
- Неожиданные мутации
16Go [2.2] Big O
- Сложность операций: Big O
- Как данные хранятся в памяти?
- Практика: Угадай сложность
17Go [2.3] Хеш-таблица
- Проблема поиска
- Придумываем хеш-таблицу
- Коллизии
- Создаем свою хеш-таблицу
- Заключение
18Go [2.4] Map
- Введение
- Идея swiss tables
- hash
- Каталог и расширяемое хеширование
- Таблицы (Swiss tables)
- Группы
- Поиск элемента и пробирование
- CRUD в map
- Нюансы map
- Заключение
19Go [2.5] Интерфейсы
- Устройство интерфейсов
- Таблицы методов (itab)
- Интерфейсы, nil и производительность
- Использование интерфейсов
20Go [2.6] Время - time
- Основы времени
- Арифметика времени
- Форматирование и парсинг времени
- Временные зоны
- Monotonic и Wall Time
- Таймеры и задержки
- DST, високосные секунды и другие подводные камни
21Go [2.7] Работа с файловой системой
- Введение в работу с файлами
- Ручное управление файлом
- Операции с *os.File
- Пример: чтение конфигурации
- Работа с большими файлами
- bufio
- Реализуем логику head
- Пути и работа с директориями
- Directory (Path) Traversal
- Рекурсивный обход файловой системы
- Права доступа, метаданные и временные файлы
- Атомарная запись
- Практика: реализуем tail
- Стандартные операции над файлами
22Go [2.8] JSON
- Что такое JSON
- Основы JSON
- omitempty и omitzero
- MarshalJSON и UnmarshalJSON
- Вложенные структуры, слайсы, мапы
- Динамический JSON
- Валидация в UnmarshalJSON
- Streaming и работа с большими данными
- Циклические ссылки
- encoding/json/v2
- stepik
23Go [2.9] Конкурентность
- Горутины и GMP
- Как устроен GMP
- Горутины
- Каналы
- Нюансы каналов
- Практика с каналами
- select
- Таймеры и таймауты
24Go [2.10] Контекст
- Введение в контекст
- Отмена контекста
- Передача контекста вниз по стеку
- Причина - context.Cause
- Пример: длинные вычисления с проверкой контекста
25Go [2.11] Сигналы
- Работа с сигналами
- Graceful shutdown
26Go [2.12] Пакет sync
- Введение в пакет sync
- sync.Mutex
- sync.RWMutex
- sync.WaitGroup
- sync.Once
- sync.Cond
- sync.Map
- sync.Pool
- errgroup
- Что выбрать?
27Go [2.13] Пакет atomic
- Атомарные операции
- Пример: Флаг отмены для воркеров
- Атомарное обновление структуры - atomic.Pointer
- Когда нельзя использовать атомарные операции
- Заключение
28Go [2.14] Паттерны конкурентности
- Graceful shutdown
- Pipeline
- Worker Pool
- Fan-Out/Fan-In
- Resource Pool
- Circuit Breaker
- Rate Limiting
- Pub/Sub
- Prioritized Select
29Go [2.15] Задачи по конкурентности
- Семафор
- Идемпотентный закрыватель каналов
- Паттерны And и Or
- Неблокирующая передача данных
- Window Buffer
- Паттерн Мост (Bridge)
- Динамический Fan-In
- Паттерн First-Of
- Singleflight
- Собственный errgroup
- Паттерн Барьер
- Мини-оркестратор с откатом
- Worker Pool с динамическим масштабированием
- Диспетчер нетраннера
30Go [2.16] CLI
- Введение в CLI-приложения
- Цветной вывод и индикаторы прогресса
- Стандартный пакет flag
- Пакет pflag
- Библиотека urfave/cli
- Библиотека Cobra и Viper
- Интерактивные режимы (REPL)
31Go [2.17] Теория HTTP
- Введение в HTTP как протокол
- Уровни сетевого взаимодействия: OSI
- Эволюция HTTP
- Stateless-природа HTTP
32Go [2.18] HTTP-сервер
- Основы HTTP-сервера
- Регистрация обработчиков
- Запуск сервера
- Заполнение обработчиков
- Добавляем log/slog
- Роутер
- Роутинг в http.ServeMux
- Убираем глобальный логгер
- Middleware
- Context и цепочки middleware
- Настройка HTTP-сервера
- Чтение данных из HTTP-запроса
- Раздача статических файлов
- Загрузка файлов
- Множественная загрузка файлов
- Заключение
33Go [2.19] HTTP-клиент
- Простые запросы HTTP
- http.Client
- http.Transport
- Диагностика сетевых ошибок
- http.Request
34Конец второй части курса
- Что дальше?
Отзывы о курсе
Оставьте отзыв
Расскажите о качестве обучения, поддержке и результате. Это поможет другим выбрать организацию осознанно.
Оставьте заявку
Консультант ответит на вопросы о курсе «Программа: Твой Go» и поможет разобраться в деталях обучения.
Нажимая кнопку, вы даете согласие на обработку персональных данных
Информация обновлена 14 сентября 2026 г.

Stepik 

















