Задача курса
Go: композиция интерфейсов ReaderNotifier и обработка ошибки
Курс «Golang с нуля» · урок «Композиция интерфейсов и подмена зависимости»
Условие
Предупреждения о качестве воздуха
Городские службы мониторинга окружающей среды нередко сталкиваются с задачей своевременного оповещения жителей о резком ухудшении качества воздуха. Датчики непрерывно снимают показания концентрации вредных веществ, а система должна отличать фоновый шум от действительно опасных значений и реагировать лишь тогда, когда показание превышает установленный порог.
В основе решения лежат два чётко разграниченных контракта: один описывает источник данных, другой — способ доставки предупреждений. Центральный сервис работает только через составной интерфейс, объединяющий оба контракта, что позволяет подменять реальное оборудование любой совместимой реализацией. Такая архитектура делает логику обработки независимой от физической природы датчика или канала связи.
Что нужно сделать
Допишите Notify у тестовой станции и Process у сервиса. Сервис должен работать только с составным интерфейсом ReaderNotifier: получать указанное число показаний и создавать предупреждение лишь для значения строго выше порога. Если уведомление вернуло ошибку, обработка сразу завершается, а main печатает ошибку.
Формат ввода
В первой строке три целых числа: число показаний N, порог и номер уведомления, на котором станция должна вернуть ошибку. Ноль в третьем числе означает, что ошибки не будет. Во второй строке — N показаний.
Формат вывода
При успехе напечатайте накопленные предупреждения вида alert=V, каждое с новой строки; если их нет — none. При сбое: error=notify failed reads=R notifications=A, где R — число уже прочитанных показаний, а A — число попыток уведомления. Это делает момент остановки наблюдаемым.
Пример
Ввод:
4 50 0
45 51 50 76
Вывод:
alert=51
alert=76
Примеры
Пример 1
- Ввод
4 50 0 45 51 50 76
- Ожидаемый результат
alert=51 alert=76
