Вот вопросы которые возникают при написании движка для конфигов:
- количество копий данных
- конкуентный доступ (что если программа должна будет обновлять часть конфига на лету)
- сохранение конфига на диск в случае изменения программой и мердж с уже имеющимся конфигом на диске в случае если он уже был изменен в ручную и не был загружен приложением до момента мерджа
- доступ из нескольких пакетов (как правило тех где бизнес-логика, а не универсальных библиотек)
- формат хранения данных, xml, json, ini или любой другой вариант, включая базу данных
- своевременное обновление конфига при изменении из вне. С перезагрузкой приложения, без перезагрузки в автоматическом режиме (программа сама отслеживает изменился ли файл конфига) в режиме получения сигнала на то что конфиг нужно перечитать.
Так же не стоит забывать о том что для конфигов есть сетевые сервисы с такими же особенностями, но со своей спецификой.
Идеального конфига под Golang пока не видел, но есть очень интересные.
Так же есть вопрос -
что будет делать движок в случае если ваша программа ожидает одних данных в конфиге,
а в самом файле ошибка или предположим каких-то полей нет.
Некоторые конфиги работающие по принципу "возьмём файл и скиним его на структуру" в этом случае не работают потому что структура не совпадает. А не совпадать она может очень часто, потому что клиентам и их сотрудникам заранее не известно что это очень чувствительное место программы.