Валидация конфигурации со сбором всех ошибок на 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; множество увиденных ключей.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Банковские счета и sentinel-ошибки на Go
Следующий вопрос
Калькулятор обратной польской записи с ошибками на Go