Задача курса

Go type assertion с ok: дополнительный интерфейс для объекта

Курс «Golang с нуля» · урок «Интерфейсы: определение, неявная реализация и type assertion»

Условие

Этикетки для посылок

На сортировочном складе каждое отправление перед отправкой получает бумажную этикетку: без неё посылку не примут на линию. У обычных коробок этикетка содержит только базовую информацию о грузе, тогда как хрупкие посылки требуют ещё и предупреждающей пометки — без неё хрупкое содержимое рискует не добраться до адресата целым. Оба типа отправлений умеют описывать себя через единое понятие «этикетка», хотя внутренне устроены по-разному.

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

Именно так устроена программа: она хранит все отправления вместе и последовательно обращается к каждому за основной этикеткой, а затем аккуратно проверяет, способно ли данное отправление выдать предупреждение. Если да — предупреждение печатается следом; если нет — строка просто пропускается, и список продолжается дальше. В итоге на экране появляется полный комплект этикеток для всей партии в исходном порядке поступления.

Что нужно сделать

Допишите Label, Warning, фабрику makeParcel и обработку очереди. Ввод содержит ровно три строки kind weight, где kind равен box или fragile. Для каждого значения выведите box weight=N либо fragile weight=N; сразу после хрупкой посылки выведите warning=handle-with-care. Используйте срез []Labeler и безопасную type assertion к WarningLabeler с ok.

Примеры

Пример 1

Ввод
box 5
fragile 2
box 9
Ожидаемый результат
box weight=5
fragile weight=2
warning=handle-with-care
box weight=9

Попробуйте решить

РешениеGo
Без регистрации · результат не сохраняется