Пакет config предназначен для работы с конфигурацией приложения с поддержкой:
- множественных источников данных (yaml, переменные окружения, кастомные источники)
- валидации конфигурации
- типизированного доступа к параметрам
Основная структура для работы с конфигурацией.
Methods:
Конструктор конфигурации с опциями:
WithExtraSource- добавить дополнительные источники, реализующие интерфейсSourceWithEnvPrefix- установить префикс для переменных окруженияWithValidator- установить валидатор конфигурации, реализующий интерфейсValidator
Установить новое/перезаписать существующее значение параметра конфигурации.
Удалить параметра конфигурации.
Получить обязательные параметры конфигурации.
Получить опциональные параметры конфигурации (возвращает значения по-умолчанию).
Спарсить всю конфигурацию и записать ее по переданному указателю. Если был установлен валидатор, то спаршенная конфигурация будет провалидирована.
Создание источника конфигурации из yaml-файла.
Получить конфигурацию из yaml-файла в виде мэпы.
package main
import (
"log"
"time"
"github.com/txix-open/isp-kit/config"
"github.com/txix-open/isp-kit/validator"
)
type appConfig struct {
Host string `validate:"required"`
Port int `validate:"required"`
Timeout time.Duration
Database struct {
Dsn string
}
}
func main() {
cfg, err := config.New(
config.WithExtraSource(config.NewYamlConfig("config.yml")),
config.WithEnvPrefix("APP_"),
config.WithValidator(validator.Default),
)
if err != nil {
log.Fatal(err)
}
var actual appConfig
err = cfg.Read(&actual)
if err != nil {
log.Fatal(err)
}
/* access to parameters */
port := cfg.Mandatory().Int("port")
timeout := cfg.Optional().Duration("timeout", 5*time.Second)
}