Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Package config

Пакет config предназначен для работы с конфигурацией приложения с поддержкой:

  • множественных источников данных (yaml, переменные окружения, кастомные источники)
  • валидации конфигурации
  • типизированного доступа к параметрам

Types

Config

Основная структура для работы с конфигурацией.

Methods:

New(opts ...Option) (*Config, error)

Конструктор конфигурации с опциями:

  • WithExtraSource - добавить дополнительные источники, реализующие интерфейс Source
  • WithEnvPrefix - установить префикс для переменных окружения
  • WithValidator - установить валидатор конфигурации, реализующий интерфейс Validator

(c *Config) Set(key string, value any)

Установить новое/перезаписать существующее значение параметра конфигурации.

(c *Config) Delete(key string)

Удалить параметра конфигурации.

(c *Config) Mandatory() Mandatory

Получить обязательные параметры конфигурации.

(c *Config) Optional() Optional

Получить опциональные параметры конфигурации (возвращает значения по-умолчанию).

(c *Config) Read(ptr any) error

Спарсить всю конфигурацию и записать ее по переданному указателю. Если был установлен валидатор, то спаршенная конфигурация будет провалидирована.

YamlFileSource

Создание источника конфигурации из yaml-файла.

(y YamlFileSource) Config() (map[string]string, error)

Получить конфигурацию из yaml-файла в виде мэпы.

Usage

Default usage flow

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)
}