defer: порядок выполнения и отличие ожидаемой ошибки от panic
Содержание курса
Закрытие запущенных этапов
Когда сложная операция разбивается на несколько последовательных этапов, каждый из них требует аккуратного завершения — вне зависимости от того, чем закончился весь процесс. Пропустить закрытие хотя бы одного этапа значит оставить систему в неопределённом состоянии, поэтому порядок завершения не менее важен, чем порядок запуска.
Пользователь задаёт количество этапов, которые нужно запустить последовательно. Каждый запущенный этап немедленно ставится в очередь на закрытие, и эта очередь раскручивается строго в обратном порядке: последний запущенный закрывается первым. Именно такая симметрия гарантирует, что ни один этап не окажется открытым после завершения работы.
Если число этапов выходит за допустимые пределы, программа сообщает об этом как об обычной ошибке и останавливается. В остальных случаях — будь то полный успех или досрочный выход из-за рядовой ошибки в середине работы — в конце всегда появляется итоговое сообщение. Наблюдая за выводом программы, можно убедиться, что закрытия действительно следуют в ожидаемом обратном порядке и финальная строка не теряется ни при каком из допустимых сценариев.
Что уже дано
Программа получает число этапов и выводит запуск каждого этапа в цикле.
Что нужно сделать
Допишите stopStages. При допустимом числе от 1 до 3 регистрируйте через defer закрытие каждого уже запущенного этапа. При выходе закрытия должны появиться в обратном порядке. Одно финальное сообщение сеанс завершён обязано появиться и при раннем возврате обычной ошибки. Для недопустимого числа верните errors.New("некорректное число этапов"); panic использовать нельзя.
Ввод и вывод
Программа читает одно целое число из stdin. Она печатает запуск этапов, затем отложенные закрытия и итоговую строку.
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
3
Ожидаемый выводзапустить этап 1 запустить этап 2 запустить этап 3 закрыть этап 3 закрыть этап 2 закрыть этап 1 сеанс завершён результат: успешно
Как проверяется решение
Сравнение вывода: Правила исходной проверяющей системы.
Отправьте решение, чтобы увидеть результаты тестов.
