Контест Middle Ошибки, defer, panic и recover обновлено

Валидация конфигурации со сбором всех ошибок на Go

Условие

Проверьте конфиг из строк ключ=значение. Пробелы вокруг ключа и значения обрезаются. Пустые строки и строки, начинающиеся с # (после обрезки пробелов), пропускаются. Строки нумеруются с 1, включая пропущенные.

Известные ключи: host (непустая строка, обязателен), port (целое 1..65535, обязателен), timeout_ms (целое ≥ 0, по умолчанию 1000), mode (dev или prod, по умолчанию dev). Целое: необязательный знак и цифры, в пределах int64.

Ошибки (каждая строка даёт не больше одной, проверки по порядку):

  • нет = или пустой ключ: line N: syntax error;
  • неизвестный ключ: line N: unknown key K;
  • ключ уже встречался раньше (с любым значением): line N: duplicate key K;
  • неверное значение: line N: invalid K.

После всех строк для отсутствующих обязательных ключей: missing host, затем missing port.

Вывод: если ошибок нет, OK и четыре строки host=.., port=.., timeout_ms=.., mode=... Иначе все ошибки по порядку. Проверка построчная.

Пример

5
host = db.local
port=5432
# комментарий

mode=prod
OK
host=db.local
port=5432
timeout_ms=1000
mode=prod

Как подойти

strings.Cut, TrimSpace, Atoi; ошибки в слайс или errors.Join; множество увиденных ключей.

Решите в тренажёре

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

Термины по теме