GOLANG NINJA. Искусство РАБОТЫ С ОШИБКАМИ

Уверены ли вы, что ваш код по работе с ошибками не стыдно показать людям?

Практически год ежедневной работы потребовался для создания курса на такую, казалось бы, очевидную тему.
Мы не подойдём тем, кто никогда не разрабатывал ни на одном языке программирования или едва знаком с Go
Online
> 125 заданий
Без дедлайнов
53 урока

Рейтинг на платформе 5.0

Обучили секретным техникам

243 ниндзя

Начальные требования:

Знание Go на уровне решения небольших, но порою сложных задачек

Знание Си на уровне решения небольших задачек на основе готового кода

Установленный gcc (или Docker)

Установленный компилятор Go >= 1.18

Минимальное владение git

Крайне желательна Unix-подобная ОС (не Windows)

Что такого особенного можно рассказать про ошибки?

Мы считаем, что грамотная обработка ошибок – это залог отказоустойчивости вашего приложения и здесь не всё так очевидно, как кажется на первый взгляд:

Сколько способов обернуть ошибку вы знаете? Один? Два? А их больше пяти! Какие подводные камни скрывает каждый из них?

Как обработать ошибку, не импортируя её пакет?

Может быть, вы знаете как стандартная библиотека пишет стектрейс ошибки?

А что такое константные ошибки?

Чему я научусь?

Если вы новичок в Go, то точно укрепите свои знания и вдоволь насладитесь примерами боевого кода, которых вам скорее всего не хватает в данный момент. Но предупреждаем, что вероятно вы не сможете осилить все задачи курса. 

Если вы сеньор-помидор и практикующий Go-разработчик, то лишний раз познакомитесь с лучшими практиками и узнаете, за что стоит бить по рукам своих коллег, а может даже и себя.

В любом случае, если у вас есть опыт программирования в целом, навыки гугления стандартных пакетов и желание дойти до конца – то курс должен хорошо зайти.
Курс только про ошибки?

Нет!

Часто уроки содержат авторские комментарии по смежным темам (таким как тестирование, concurrency, статический анализ кода и т. д.), а каждый модуль снабжён всеобъемлющим списком литературы. Модули «Работа с ошибками в тестах» и «Работа с ошибками при конкурентном коде» заставят вас особенно попотеть.

Смежное по отношению к ошибкам понятие паники разбирается во второй части специализации.

Курс – сплошная теория?

Нет, нет и нет!

Разумеется, нам придётся коснуться теоретических аспектов работы с ошибками в Go, но будьте готовы читать много исходного кода как стандартной библиотеки, так и сторонних модулей.

Доступ к каждому последующему модулю открывается только после решения задач и тестов в текущем. Примеры из курса и заготовки для задач лежат в отдельном GitHub-репозитории. Для каждой задачи представлены юнит-тесты, которые она должна проходить — вам не придётся мучиться с вводом-выводом, как это бывает в задачах на других курсах.

О курсе

Программа курса

9 модулей
53 урока
71 тест
56 интерактивных задач
Error Wrapping
Custom Errors
Concurrent Errors
Go Error Linters
pkg/errors
errors.Is / errors.As
Go 2 Errros
Error Testing

Модули курса

1 АК. ЧАС

1. Вступительное слово

5 АК. ЧАСов

2. Концепция ошибок в Си

18 АК. ЧАСов

3. Концепция ошибок в Go

11 ак. часов

4. Нестандартные модули для работы с ошибками в Go

18 ак. часов

5. Лучшие практики по работе с ошибками в Go

5 АК. ЧАСов

6. Работа с ошибками в тестах

7 ак. часов

7. Работа с ошибками приконкурентном коде

4 ак. часа

8. Будущее ошибок в Go 2

1 час

9. Заключительное слово

1. Вступительное слово

01

Вступительное слово

1 ак. час

Данный раздел посвящён ознакомлению обучающегося с учебным процессом и
необходимым для прохождения программы техническим инструментарием.

2. КОНЦЕПЦИЯ ОШИБОК В СИ

01

Вступление

0,1 ак. часа

02

Знакомство с errno

1 ак. час

03

Знакомство с errno_t

1 ак. час

04

Организация "своих" ошибок

2 ак. часа

09

Литература

0,9 ак. часа

В данном разделе рассматриваются базовые подходы к обработке ошибок в языке программирования Си, являющемся фундаментом для формирования многих
современных языков, включая Go. Раздел направлен на формирование у обучающихся понимания исторических предпосылок и ограничений классических механизмов обработки ошибок.

В ходе изучения обучающиеся знакомятся с основными инструментами сигнализации об ошибках в Си, включая использование глобального индикатора
ошибки errno, а также специализированного типа errno_t. Рассматриваются подходы организации пользовательских типов ошибок и их применению в
программировании.

Раздел выполняет важную методическую функцию, позволяя проследить эволюцию подходов к обработке ошибок и подготовить обучающихся к осознанному
восприятию концепции ошибок в языке Go.

Особое внимание уделяется анализу недостатков данного подхода, включая сложность сопровождения кода, необходимость ручного контроля ошибок и высокий
риск их некорректной обработки. Практическая часть позволяет обучающимся на собственном опыте столкнуться с указанными ограничениями.

3. КОНЦЕПЦИЯ ОШИБОК В go

01

Вступление

0,1 ак. часа

02

Введение в интерфейсы в Go

3 ак. часа

03

Концепция ошибок в Go

1 ак. час

04

Базовые подходы к обработке ошибок в Go

2 ак. часа

05

Стандартный пакет errors

1 ак. час

06

Врапинг ошибок до Go 1.13

1 ак. час

07

Врапинг ошибок после Go 1.13 (часть 1)

3 ак. часа

08

Врапинг ошибок после Go 1.13 (часть 2)

4 ак. часа

09

Изменения после Go 1.20

1 ак. час

10

Литература

1,9 ак. часа

В данном разделе рассматривается концепция обработки ошибок в языке программирования Go, являющаяся одной из ключевых особенностей языка и определяющая подход к разработке надёжных программных решений.

Обучение начинается с актуализации знаний об интерфейсах в Go, необходимых для понимания встроенного интерфейса error и принципов его использования. Далее обучающиеся знакомятся с базовой моделью работы с ошибками, включая создание собственных ошибок и идиоматичные подходы к их обработке.

В рамках раздела подробно изучается механизм оборачивания (wrapping) ошибок: от подходов, применяемых до версии Go 1.13, до современных инструментов, включая функции errors.Unwrap, errors.Is, errors.As и использование директивы %w.

Особое внимание уделяется фундаментальным принципам работы с ошибками, сформулированным в экосистеме Go, а также базовым практикам их обработки. Рассматриваются средства стандартной библиотеки, предназначенные для работы с ошибками, и их эволюция в различных версиях языка.

Отдельное внимание уделяется построению цепочек ошибок с сохранением контекста и возможностью последующего анализа.

4. Нестандартные модули
для работы с ошибками в Go

01

Вступление

0,1 ак. часа

02

github.com/pkg/errors (часть 1)

2 ак. часа

03

github.com/pkg/errors (часть 2)

1 ак. час

04

github.com/pkg/errors (часть 3)

2 ак. часа

05

github.com/cockroachdb/errors (часть 1)

1 ак. час

06

github.com/cockroachdb/errors (часть 2)

2 ак. часа

07

Прочие нестандартные модули

2 ак. часа

08

Литература

0,9 ак. часа

Основной целью раздела является формирование у обучающихся понимания роли нестандартных инструментов в экосистеме Go, а также осознание целесообразности их использования по сравнению со стандартной библиотекой.

Рассматриваются преимущества и ограничения сторонних решений, а также риски, связанные с одновременным использованием различных подходов к работе с ошибками.

Также рассматривается библиотека github.com/cockroachdb
/errors, предлагающая расширенные возможности, такие как комбинирование ошибок и поддержка передачи ошибок между сервисами, включая сетевые взаимодействия. Анализируются её особенности и отличия от других решений.

Дополнительно обучающиеся знакомятся с рядом других популярных библиотек, используемых в production-разработке, что позволяет сформировать общее представление о существующих подходах и инструментах.

Таким образом, раздел формирует у обучающихся навыки осознанного выбора инструментов для работы с ошибками и понимание их места в архитектуре современных программных решений.

В ходе обучения обучающиеся знакомятся с библиотекой
github.com/pkg/errors, которая долгое время являлась фактическим стандартом для расширенной работы с ошибками, включая поддержку стеков вызовов (stack traces) и дополнительные средства обогащения ошибок контекстом.

Отдельное внимание уделяется вопросам совместимости данной библиотеки со стандартным пакетом errors и возможностям миграции между ними.

5. Лучшие практики по
работе с ошибками в Go

01

Вступление

0,1 ак. часа

02

Объявление ошибок

1 ак. час

03

Ошибки и тип ресивера

1 ак. час

04

Константные ошибки

1 ак. час

05

Базовые идиомы по обработке ошибок (часть 1)

1 ак. час

06

Про метод Error

2 ак. часа

07

Базовые идиомы по обработке ошибок (часть 2)

1 ак. час

08

Исключения из правил

2 ак. часа

09

Лучшие практики врапинга

2 ак. часа

10

Оборачивание io.EOF и иже с ним

0,5 ак. часа

11

Логирование ошибок

2 ак. часа

12

Monadic-style работа с ошибками

1,5 ак. часа

13

Линтеры и ошибки (часть 1)

1 ак. час

14

Линтеры и ошибки (часть 2)

1 ак. час

15

Литература

0,9 ак. часа

В данном разделе систематизированы лучшие практики и распространённые подходы к работе с ошибками в языке программирования Go, сформированные как стандартной библиотекой, так и профессиональным сообществом разработчиков.

В ходе изучения рассматриваются правила объявления и именования ошибок, особенности реализации пользовательских типов ошибок, включая выбор типа ресивера, а также потенциальные проблемы, связанные с использованием
константных ошибок.

Дополнительно изучаются подходы к логированию ошибок, а также альтернативные концепции их обработки, включая использование элементов функционального программирования (monadic-style).

Важной частью раздела является знакомство со средствами статического анализа (линтерами), позволяющими выявлять ошибки и несоответствия лучшим практикам на этапе разработки.

Особое внимание уделяется вопросам корректного сравнения ошибок, ограничениям использования метода Error, а также случаям, когда допустимо отступление от общепринятых правил. Рассматриваются практики оборачивания (wrapping) ошибок, включая ситуации, в которых его применение является оправданным, а также исключения, связанные с отдельными типами ошибок (например, io.EOF).

6. Работа с ошибками в тестах

01

Вступление

0,1 ак. часа

02

Работа с ошибками в тестах (часть 1)

2 ак. часа

03

Работа с ошибками в тестах (часть 2)

1 ак. час

04

Работа с ошибками в тестах (часть 3)

1 ак. час

05

Литература

0,9 ак. часа

В данном разделе рассматриваются подходы к тестированию программного кода, возвращающего ошибки, в языке программирования Go. Раздел направлен на формирование у обучающихся практических навыков корректной проверки и анализа ошибок в процессе написания тестов.

В ходе изучения обучающиеся знакомятся с основными принципами тестирования функций, возвращающих ошибки, включая выбор корректных способов их сравнения, проверки и интерпретации.

Особое внимание уделяется различию между допустимыми и нежелательными практиками тестирования, а также типичным ошибкам, возникающим при работе с ошибками в тестах.

7. Работа с ошибками при конкурентном коде

01

Вступление

0,1 ак. часа

02

Передача ошибок между горутинами

3 ак. часа

03

Ошибки при выполнении групповых задач

3 ак. часа

04

Литература

0,9 ак. часа

В данном разделе рассматриваются особенности обработки ошибок в условиях конкурентного выполнения программ на языке Go.

Раздел направлен на формирование у обучающихся понимания специфики возникновения и обработки ошибок в многопоточных сценариях, а также на освоение практических подходов к их управлению.

В ходе изучения формулируются ключевые проблемы, возникающие при работе с ошибками в конкурентной среде, включая вопрос определения ответственного за обработку ошибок.

Особое внимание уделяется механизмам доставки ошибок между горутинами и способам централизованной обработки результатов выполнения конкурентных операций.

Раздел предполагает наличие у обучающихся базовых знаний о конкурентности в Go (горутины, каналы, контексты), и сосредоточен непосредственно на аспектах, связанных с обработкой ошибок.

Также рассматриваются подходы к обработке ошибок при выполнении групповых задач, включая использование специализированных инструментов, таких как пакет golang.org/x/sync/errgroup, упрощающий координацию параллельных вычислений и агрегацию возникающих ошибок.

8. Будущее ошибок в Go 2

01

Вступление

0,1 ак. часа

02

Error Inspection & Printing

1 ак. час

03

Error Handling

1 ак. час

04

Литература

1,9 ак. часа

В данном разделе рассматриваются перспективы развития механизмов обработки ошибок в языке программирования Go в контексте инициативы Go 2.

Раздел носит теоретический характер и направлен на формирование у обучающихся целостного представления об эволюции подходов к работе с ошибками и тенденциях их дальнейшего развития.

В ходе изучения обучающиеся знакомятся с концепциями, предложенными в рамках черновиков design-документов, включая новые подходы к обработке ошибок (error handling), их проверке (error inspection) и выводу (error printing).

Особое внимание уделяется проблемам, существующим в текущей модели работы с
ошибками, а также способам их возможного решения, предложенным сообществом разработчиков Go.

9. ЗАКЛЮЧИТЕЛЬНОЕ слово

01

Заключительное слово

1 ак. час

Данный раздел посвящён подведению итогов и знакомству обучающегося с
каналами обратной связи по вопросам, связанных с материалом программы.

Купите ПАКЕТ из ДВУХ курсов по специальной цене

Покупка пакета курсов – это наиболее выгодный способ приобрести оба курса в любом случае, независимо от периодических акций и скидок.
В пакет входят 2 курса:

Искусство работы с ошибками (данный курс)

С эти курсом проходят

Скидка -23%

Стоимость курса

17 330 ₽ / за курс

ДОСТУП К КУРСУ ПРИДЁТ НА УКАЗАННЫЙ EMAIL
В ТЕЧЕНИЕ ТРЁХ РАБОЧИХ ДНЕЙ ПОСЛЕ ОПЛАТЫ 👌

22 529 ₽ / за курс

Вы попробовали и поняли, что вам сейчас не подходит этот курс? Ничего страшного, мы можете запросить возврат средств в течение 30 дней после покупки.

Искусство работы С Ошибками