Я новичок в программировании на Go, и мне интересно: каков предпочтительный способ обработки параметров конфигурации для программы на Go ( для чего в других контекстах можно использовать файлы свойств или файлы ini )?
go
configuration-files
theglauber
источник
источник
Ответы:
Формат JSON работал для меня довольно хорошо. Стандартная библиотека предлагает методы для записи структуры данных с отступом, поэтому она вполне читаема.
Смотрите также эту нить голанг-орехов .
Преимущества JSON заключаются в том, что его довольно просто анализировать и читать / редактировать человеком, предлагая семантику для списков и отображений (что может оказаться весьма удобным), что не имеет место для многих конфигурационных парсеров ini-типа.
Пример использования:
conf.json :
Программа для чтения конфигурации
источник
defer file.Close()
после проверки open errДругой вариант - использовать TOML , который является INI-подобным форматом, созданным Томом Престоном-Вернером. Я построил парсер Go для него, который тщательно протестирован . Вы можете использовать его, как и другие варианты, предложенные здесь. Например, если у вас есть эти данные TOML в
something.toml
Затем вы можете загрузить его в свою программу Go с чем-то вроде
источник
Viper - это система управления конфигурацией golang, которая работает с JSON, YAML и TOML. Это выглядит довольно интересно.
источник
Я обычно использую JSON для более сложных структур данных. Недостатком является то, что вы легко получаете кучу кода, чтобы сообщить пользователю, где была ошибка, различные крайние случаи, а что нет.
Для базовой конфигурации (ключи API, номера портов, ...) мне очень повезло с пакетом gcfg . Он основан на формате git config.
Из документации:
Пример конфигурации:
Перейти структура:
И код должен был прочитать это:
Он также поддерживает значения срезов, поэтому вы можете разрешить указание ключа несколько раз и другие полезные функции, подобные этому.
источник
Просто используйте стандартные флаги go с iniflags .
Стандартные флаги go имеют следующие преимущества:
Единственный недостаток стандартных флагов go - это проблемы управления, когда количество флагов, используемых в вашем приложении, становится слишком большим.
Iniflags элегантно решает эту проблему: просто измените две строки в вашем основном пакете, и он волшебным образом получит поддержку чтения значений флагов из INI-файла. Флаги из INI-файлов могут быть переопределены путем передачи новых значений в командной строке.
См. Также https://groups.google.com/forum/#!topic/golang-nuts/TByzyPgoAQE подробности.
источник
go test
не позволяет передавать флаги), в то время как файл конфигурации не будет.*FlagName = value
Я начал использовать Gcfg, который использует Ini-подобные файлы. Это просто - если вы хотите что-то простое, это хороший выбор.
Вот код загрузки, который я использую в настоящее время, который имеет настройки по умолчанию и позволяет флаги командной строки (не показаны), которые переопределяют некоторые из моих настроек:
источник
взгляни на гонфиг
источник
https://github.com/spf13/viper и https://github.com/zpatrick/go-config - довольно хорошие библиотеки для файлов конфигурации.
источник
Используйте toml, как эта статья. Чтение конфигурационных файлов.
источник
Я написал простую конфигурационную библиотеку ini на Голанге.
https://github.com/c4pt0r/cfg
безопасен, прост в использовании
=================== Update =======================
В последнее время мне нужен анализатор INI с поддержкой разделов, и я пишу простой пакет:
Вы можете анализировать INI, например, используя пакет "flag":
источник
Вас также может заинтересовать go-libucl , набор привязок Go для UCL, универсальный язык конфигурации. UCL немного похож на JSON, но с лучшей поддержкой для людей: он поддерживает комментарии и удобочитаемые конструкции, такие как множители SI (10k, 40M и т. Д.), И имеет немного меньший шаблон (например, кавычки вокруг ключей). На самом деле это довольно близко к формату файла конфигурации nginx, если вы уже знакомы с этим.
источник
Я согласен с Немо и написал небольшой инструмент, чтобы все было по-настоящему легко.
bitbucket.org/gotamer/cfg - это пакет конфигурации json
Смотрите doc.go для примера
источник
Я попробовал JSON. Это сработало. Но я ненавижу создавать структуру точных полей и типов, которые я могу задавать. Для меня это было болью. Я заметил, что это был метод, используемый всеми опциями конфигурации, которые я мог найти. Возможно, мой опыт работы с динамическими языками делает меня слепым к преимуществам такой многословности. Я создал новый простой формат файла конфигурации и более динамическую библиотеку для его чтения.
https://github.com/chrisftw/ezconf
Я довольно новичок в мире Го, так что это может быть не путь Го. Но это работает, это довольно быстро и очень просто в использовании.
Pros
Cons
источник