config

package
v0.0.13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 10, 2026 License: Apache-2.0 Imports: 7 Imported by: 7

README

Config

config — пакет для управления конфигурацией приложений с использованием Viper, поддержки .env файлов через godotenv и флагов командной строки через pflag.


Особенности

  • Загрузка конфигурации из YAML/JSON/TOML файлов.
  • Поддержка .env файлов.
  • Автоматическое чтение переменных окружения.
  • Определение и парсинг флагов командной строки.
  • Получение значений различных типов: string, int, bool, float64, time.Duration, срезы и т.д.
  • Распаковка конфигурации в структуры.
  • Значения по умолчанию.
  • Поддержка префикса для переменных окружения (envPrefix).

Приоритет значений конфигурации

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

  1. Флаги командной строки (переданные при запуске приложения)
  2. Переменные окружения (с учётом префикса, если задан)
  3. Значения из конфигурационного файла (.yaml, .json, .toml и т.д.)
  4. Значения по умолчанию, установленные через SetDefault

Это означает, что флаги командной строки всегда переопределяют переменные окружения и значения из файла, а переменные окружения — значения из файла.


Использование envPrefix

envPrefix позволяет задать префикс для всех переменных окружения.

Например, если вы укажете envPrefix = "APP" и ключ конфигурации server.addr, пакет будет искать переменную окружения:

APP_SERVER_ADDR

Пример использования пакета config

package app

import (
	"fmt"

	"github.com/wb-go/wbf/config"
)

type appConfig struct {
	serverConfig   serverConfig
	loggerConfig   loggerConfig
	postgresConfig postgresConfig
}

type serverConfig struct {
	addr string
}

type loggerConfig struct {
	logLevel string
}

type postgresConfig struct {
	maxOpenConns    int
	maxIdleConns    int
	connMaxLifetime time.Duration
	port			int
}

func NewAppConfig() (*appConfig, error) {
	envFilePath := "./.env-example"
	appConfigFilePath := "./config-example1.yaml"
	postgresConfigFilePath := "./config-example2.yaml"

	cfg := config.New()

	// Загрузка .env файлов
	if err := cfg.LoadEnvFiles(envFilePath); err != nil {
		return nil, fmt.Errorf("failed to load env files: %w", err)
	}

	// Включение поддержки переменных окружения
	cfg.EnableEnv("")

	// Загрузка файлов конфигурации
	if err := cfg.LoadConfigFiles(appConfigFilePath, postgresConfigFilePath); err != nil {
		return nil, fmt.Errorf("failed to load config files: %w", err)
	}

	// Определение флагов командной строки
	cfg.DefineFlag("p", "srvport", "transport.http.port", 7777, "HTTP server port")
	if err := cfg.ParseFlags(); err != nil {
		return nil, fmt.Errorf("failed to pars flags: %w", err)
	}

	// Распаковка в структуру
	var appConfig *appConfig
	appConfig.serverConfig.addr = cfg.GetString("server.addr")
	appConfig.loggerConfig.logLevel = cfg.GetString("logger.level")
	appConfig.loggerConfig.logLevel = cfg.GetString("logger.level")
	appConfig.postgresConfig.maxOpenConns = cfg.GetInt("postgres.max_open_conns")
	appConfig.postgresConfig.maxOpenConns = cfg.GetInt("postgres.max_idle_conns")
	appConfig.postgresConfig.maxOpenConns = cfg.GetDuration("postgres.conn_max_lifetime")
	appConfig.postgresConfig.port = cfg.GetInt("postgres.port") // из переменной окружения (из файла .env)

	return appConfig, nil
}

Documentation

Overview

Package config предоставляет управление конфигурацией с использованием Viper.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrShortFlagLength возвращается, если короткий флаг содержит более одного символа.
	ErrShortFlagLength = errors.New("short flag must be one character")
	// ErrUnsupportedFlag возвращается, если тип флага не поддерживается.
	ErrUnsupportedFlag = errors.New("unsupported flag type")
	// ErrFlagNotFound возвращается, если указанный флаг не найден.
	ErrFlagNotFound = errors.New("flag not found")
	// ErrLoadEnvFile возвращается при ошибке загрузки .env файла.
	ErrLoadEnvFile = errors.New("failed to load env file")
	// ErrLoadConfigFile возвращается при ошибке загрузки файла конфигурации.
	ErrLoadConfigFile = errors.New("failed to load config file")
)

Functions

This section is empty.

Types

type Config

type Config struct {
	// contains filtered or unexported fields
}

Config оборачивает экземпляр конфигурации Viper.

func New

func New() *Config

New создает новый экземпляр Config.

func (*Config) DefineFlag added in v0.0.6

func (c *Config) DefineFlag(short, long, configKey string, defaultValue any, usage string) error

DefineFlag позволяет объявлять флаги (короткий и длинный) и привязывать их к ключу конфигурации.

func (*Config) EnableEnv added in v0.0.8

func (c *Config) EnableEnv(envPrefix string)

EnableEnv включает автоматическую загрузку переменных окружения. envPrefix (если задан) используется как префикс для всех ключей.

func (*Config) GetBool added in v0.0.6

func (c *Config) GetBool(key string) bool

GetBool получает логическое значение из конфигурации по ключу.

func (*Config) GetDuration added in v0.0.6

func (c *Config) GetDuration(key string) time.Duration

GetDuration получает значение продолжительности из конфигурации по ключу.

func (*Config) GetFloat64 added in v0.0.6

func (c *Config) GetFloat64(key string) float64

GetFloat64 получает вещественное значение из конфигурации по ключу.

func (*Config) GetInt added in v0.0.3

func (c *Config) GetInt(key string) int

GetInt получает целочисленное значение из конфигурации по ключу.

func (*Config) GetInt32 added in v0.0.8

func (c *Config) GetInt32(key string) int32

GetInt32 получает целочисленное значение int32 из конфигурации по ключу.

func (*Config) GetInt64 added in v0.0.8

func (c *Config) GetInt64(key string) int64

GetInt64 получает целочисленное значение int64 из конфигурации по ключу.

func (*Config) GetIntSlice added in v0.0.6

func (c *Config) GetIntSlice(key string) []int

GetIntSlice получает срез целых чисел из конфигурации по ключу.

func (*Config) GetString

func (c *Config) GetString(key string) string

GetString получает строковое значение из конфигурации по ключу.

func (*Config) GetStringSlice added in v0.0.6

func (c *Config) GetStringSlice(key string) []string

GetStringSlice получает срез строк из конфигурации по ключу.

func (*Config) GetTime added in v0.0.6

func (c *Config) GetTime(key string) time.Time

GetTime получает значение времени из конфигурации по ключу.

func (*Config) LoadConfigFiles added in v0.0.8

func (c *Config) LoadConfigFiles(paths ...string) error

LoadConfigFiles загружает и объединяет несколько файлов конфигурации.

func (*Config) LoadEnvFiles added in v0.0.8

func (c *Config) LoadEnvFiles(paths ...string) error

LoadEnvFiles загружает один или несколько файлов .env в os.Environ().

func (*Config) ParseFlags added in v0.0.6

func (c *Config) ParseFlags() error

ParseFlags парсит объявленные флаги.

func (*Config) SetDefault added in v0.0.3

func (c *Config) SetDefault(key string, value any)

SetDefault устанавливает значение по умолчанию для ключа.

func (*Config) Unmarshal added in v0.0.3

func (c *Config) Unmarshal(rawVal any, opts ...viper.DecoderConfigOption) error

Unmarshal позволяет распаковать конфигурацию в структуру.

func (*Config) UnmarshalExact added in v0.0.8

func (c *Config) UnmarshalExact(rawVal any, opts ...viper.DecoderConfigOption) error

UnmarshalExact позволяет строго распаковать конфигурацию в структуру. Вернёт ошибку, если в файле есть ключи, которых нет в структуре.

func (*Config) UnmarshalKey added in v0.0.8

func (c *Config) UnmarshalKey(key string, rawVal any, opts ...viper.DecoderConfigOption) error

UnmarshalKey позволяет распаковать часть конфигурации по ключу в структуру.

Directories

Path Synopsis
Package cleanenvport provides a unified way to load and validate application configuration from a file (YAML/JSON/TOML) using cleanenv and validator.
Package cleanenvport provides a unified way to load and validate application configuration from a file (YAML/JSON/TOML) using cleanenv and validator.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL