Чему вы научитесь
- Находить логические ошибки и скрытые дефекты в программах на Go
- Исправлять проблемы с числовыми вычислениями, преобразованиями типов и областями видимости
- Правильно работать с массивами, срезами, map, строками, байтами и рунами
- Учитывать особенности Unicode и корректно обрабатывать строки в кодировке UTF-8
- Выявлять ошибки при использовании структур, методов, интерфейсов и значений nil
- Правильно формировать цепочки ошибок и соблюдать контракт возврата значений
- Безопасно применять defer, panic и recover
- Освобождать ресурсы и контролировать их жизненный цикл
- Управлять запуском и завершением горутин
- Правильно создавать, передавать и закрывать каналы
- Исправлять блокировки, утечки горутин и ошибки синхронизации
- Применять sync.WaitGroup, sync.Mutex, sync.RWMutex, sync.Cond, sync.Once и атомарные операции
- Использовать context.Context для отмены операций и передачи служебных данных
- Исправлять ошибки в обобщённых функциях с параметрами типов
- Учитывать адресуемость и доступность значений при работе с reflection
- Настраивать сериализацию и строгую десериализацию JSON
- Правильно работать с HTTP-клиентами, серверами и обработчиками
- Безопасно читать потоки данных полностью или с ограничением размера
- Использовать таймеры и тикеры без утечек ресурсов
- Корректно работать с database/sql, транзакциями, строками результата и SQL NULL
- Писать стабильные и детерминированные тесты для конкурентного кода
- Проверять граничные случаи и учитывать некорректные входные данные
- Читать чужой код и объяснять, почему программа работает неправильно
- Писать более надёжный, понятный и предсказуемый код на Go
О курсе
Знать синтаксис Go недостаточно. В реальных проектах разработчику приходится читать чужой код, искать причины неправильного поведения программы, проверять граничные случаи и исправлять ошибки, которые не всегда обнаруживаются компилятором.
Этот курс построен вокруг практики. В каждой задаче вы получите программу или отдельную функцию, в которой допущена ошибка. Нужно будет определить причину проблемы, исправить реализацию и пройти автоматические тесты.
Курс содержит 100 задач, объединённых в 11 тематических модулей. Вы начнёте с числовых вычислений, преобразований типов, областей видимости и управляющих конструкций. Затем перейдёте к массивам, срезам, map, строкам, Unicode, структурам, методам и интерфейсам.
Отдельные модули посвящены обработке ошибок, defer, panic, освобождению ресурсов, горутинам, каналам и синхронизации общей памяти. Вы разберёте применение WaitGroup, мьютексов, условных переменных, атомарных операций и механизмов однократной инициализации.
В продвинутой части рассматриваются context.Context, generics, reflection, JSON, HTTP, потоки ввода-вывода, таймеры, database/sql, транзакции и детерминированное тестирование конкурентного кода.
Задания основаны на ситуациях, которые встречаются в реальной разработке: потеря дробной части, переполнение типов, затенение переменных, неправильная работа со срезами, неоднозначное значение nil в интерфейсах, потеря контекста ошибки, некорректное закрытие каналов, утечки горутин, небезопасный доступ к общей памяти, ошибки десериализации JSON, неправильное использование HTTP-ответов, незакрытые строки результата базы данных и нестабильные параллельные тесты.
Курс не предлагает просто перепечатать готовый ответ. Чтобы решить задачу, необходимо понять причину ошибки, выполнить требования и реализовать корректное поведение программы. Автоматические тесты проверяют не только основной сценарий, но и граничные случаи.
После прохождения курса вы будете быстрее замечать проблемные места в коде, увереннее разбирать практические задания на технических собеседованиях и допускать меньше ошибок в собственных Go-проектах.
Для кого этот курс
Начальные требования
Знание базового синтаксиса Go
Понимание переменных, выражений, условий, циклов и функций
Базовое знакомство с массивами, срезами, map и структурами
Понимание того, как объявляются методы и интерфейсы
Желательно базовое знакомство с обработкой ошибок, горутинами и каналами
Для заключительных модулей будет полезно общее представление об HTTP и реляционных базах данных
Наши преподаватели
Как проходит обучение
Курс состоит из 100 практических задач, объединённых в 11 тематических модулей.
В начале каждой задачи описывается ситуация и показывается код с ошибкой. Затем необходимо изучить требования, исправить программу и отправить решение на проверку.
В большинстве заданий нужно не написать программу с нуля, а найти конкретный дефект в уже существующем коде. Такой формат развивает навык чтения, анализа и отладки программ.
Автоматические тесты проверяют не только пример из условия, но и дополнительные сценарии. Недостаточно вывести заранее известный результат, обработать только один набор входных данных или заменить вычисление готовой константой.
Сложность повышается постепенно. Сначала рассматриваются базовые ошибки в вычислениях, преобразованиях типов и управляющих конструкциях. Затем задания переходят к коллекциям, строкам, структурам, интерфейсам, обработке ошибок, конкурентному программированию, JSON, HTTP, потокам ввода-вывода, базам данных и тестированию.
После отправки решения вы сразу получаете результат проверки. Если программа не прошла тесты, можно изучить сообщение проверяющей системы, исправить реализацию и отправить её повторно.
Рекомендуется не только исправлять программу, но и самостоятельно формулировать причину ошибки. Например, какое правило Go было нарушено, почему программа компилировалась, при каких входных данных проявлялся дефект и почему исправленный вариант работает корректно.
Такой подход помогает не просто запомнить отдельное решение, а научиться распознавать похожие проблемы в других программах.
Программа курса
Отзывы прошедших курс
Что вы получаете
- 100 практических задач на поиск и исправление ошибок в Go
- 11 тематических модулей с постепенным повышением сложности
- Практику чтения, анализа и отладки чужого кода
- Автоматическую проверку решений и граничных случаев
- Разбор распространённых ошибок Go-разработчиков
- Практику работы с массивами, срезами, map, строками и Unicode
- Задания по структурам, методам, интерфейсам и обработке ошибок
- Практику управления горутинами, каналами и общей памятью
- Задания по context.Context, generics, reflection и JSON
- Практику работы с HTTP, потоками ввода-вывода, таймерами и URL
- Задания по database/sql, транзакциям и SQL NULL
- Практику написания стабильных тестов для конкурентного кода
- Подготовку к практическим заданиям и вопросам на собеседованиях
- Навыки написания более безопасного и предсказуемого кода
- Практику работы со стандартной библиотекой Go
- Возможность обсуждать задания и сравнивать разные подходы к решению