ozzo-config — это пакет Go для работы с конфигурациями. Он поддерживает
- Чтение конфигуационных файлов JSON (с комментариями), YAML, и TOML;
- Объединение нескольких конфигураций;
- Доступ к любой части конфигурации;
- Конфигурирование объектов с помощью частей конфигурации;
- Расширение новыми форматами файлов.
Go 1.2 или выше.
Выполните следующие команды для установки:
go get github.com/go-ozzo/ozzo-config
Следующий фрагмент кода показывает, как можно использовать этот пакет.
package main
import (
"fmt"
"github.com/go-ozzo/ozzo-config"
)
func main() {
// создаём объект Config
c := config.New()
// загружаем конфигурацию из строки JSON
c.LoadJSON([]byte(`{
"Version": "2.0",
"Author": {
"Name": "Foo",
"Email": "bar@example.com"
}
}`))
// получаем значение "Version", возвращает "1.0" если оно не определено в конфигурации
version := c.GetString("Version", "1.0")
var author struct {
Name, Email string
}
// заполняем объект author из конфигурации "Author"
c.Configure(&author, "Author")
fmt.Println(version)
fmt.Println(author.Name)
fmt.Println(author.Email)
// Вывод:
// 2.0
// Foo
// bar@example.com
}
Вы можете загрузить конфигурацию тремя способами:
c := config.New()
// загрузить из одного или нескольких файлов JSON, YAML или TOML.
// форматы файлов определяются по их расширениям: .json, .yaml, .yml, .toml
c.Load("app.json", "app.dev.json")
// загрузить из одной или нескольких JSON строк
c.LoadJSON([]byte(`{"Name": "abc"}`), []byte(`{"Age": 30}`))
// загрузить из одной или нескольких переменных
data1 := struct {
Name string
} { "abc" }
data2 := struct {
Age int
} { 30 }
c.SetData(data1, data2)
При загрузке из нескольких источников, конфигурация будет получена путем рекурсивного слияния их один за другим.
Вы можете получить доступ к любой части конфигурации, используя один из методов Get
, таких как Get()
, GetString()
, GetInt()
.
Эти методы требуют параметр пути в формате X.Y.Z
, который обозначает место в конфигурации с ключами config["X"]["Y"]["Z"]
.
Если путь не соответствует значению в конфигурации, то возвращается нулевое значение или значение по умолчанию, если оно
указано при вызове метода:
// Полчаем "Author.Email". Если "Author.Email" нет в конфигруации,
// получим значение по умолчанию "bar@example.com".
email := c.GetString("Author.Email", "bar@example.com")
Вы можете изменить любую часть конфигурации с использованием метода Set
. Например, следующий код
изменяет значение конфигурации config["Author"]["Email"]
:
c.Set("Author.Email", "bar@example.com")
Вы можете использовать конфигурацию, чтобы настроить свойства объекта. Например, кофигурация, соответствующая JSON структуре
{"Name": "Foo", "Email": "bar@example.com"}
, может быть использована для задания значений полям структуры Name
и Email
.
При настройке nil интерфейса, вы должны указать конкретный тип в конфигурации при момощи элемента type
карты конфигурации.
Перед этим, так как необходимо знать, как создавать экземпляр, тип должен быть зарегистрирован при помощи вызова Register()
.
ozzo-config поддерживает три формата конфигурационных файлов: JSON (с комментариями), YAML и TOML. Для того, чтобы добавить поддержку
нового формата файла, вы должны изменить переменную config.UnmarshalFuncMap
, сопоставив новое расширение файла соответствующей
функции демаршалинга.