Использовать ли глобальные переменные для конфигов в golang?

Как правильнее - записывать структуру конфига в глобальную переменную, и дергать его из всех функций, или записывать его локально, и передавать указатель в каждую функцию, которая использует параметры из него?
  • Вопрос задан
  • 637 просмотров
Пригласить эксперта
Ответы на вопрос 2
bitver
@bitver
Глобальная (а точнее публичная в отдельном пакете для удобства) переменная используется очень часто, но это в тех случаях, когда вы не будете программно менять значение переменной. Если же значения в переменной будут меняться программно - то придётся дописать модуль, чтоб там была не только 1 переменная (уже закрытая), а пару публичных методов с мьютексами или работой с каналами - как вам удобно.
Ответ написан
@mantyr
Пишу много Golang кода с удовольствием:)
Вот вопросы которые возникают при написании движка для конфигов:
  • количество копий данных
  • конкуентный доступ (что если программа должна будет обновлять часть конфига на лету)
  • сохранение конфига на диск в случае изменения программой и мердж с уже имеющимся конфигом на диске в случае если он уже был изменен в ручную и не был загружен приложением до момента мерджа
  • доступ из нескольких пакетов (как правило тех где бизнес-логика, а не универсальных библиотек)
  • формат хранения данных, xml, json, ini или любой другой вариант, включая базу данных
  • своевременное обновление конфига при изменении из вне. С перезагрузкой приложения, без перезагрузки в автоматическом режиме (программа сама отслеживает изменился ли файл конфига) в режиме получения сигнала на то что конфиг нужно перечитать.


Так же не стоит забывать о том что для конфигов есть сетевые сервисы с такими же особенностями, но со своей спецификой.

Идеального конфига под Golang пока не видел, но есть очень интересные.

Так же есть вопрос - что будет делать движок в случае если ваша программа ожидает одних данных в конфиге, а в самом файле ошибка или предположим каких-то полей нет.

Некоторые конфиги работающие по принципу "возьмём файл и скиним его на структуру" в этом случае не работают потому что структура не совпадает. А не совпадать она может очень часто, потому что клиентам и их сотрудникам заранее не известно что это очень чувствительное место программы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы