viper

package module
v1.0.0-rc1 Latest Latest
Warning

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

Go to latest
Published: Jun 18, 2026 License: MIT Imports: 9 Imported by: 0

README

Compogo Viper

Go Reference

Адаптер Viper для фреймворка Compogo.

Реализует интерфейс compogo.Configurator через Viper с поддержкой:

  • Файлов конфигурации (YAML, JSON, TOML, и др.)
  • Переменных окружения (с автоматическим преобразованием ключей)
  • Флагов командной строки (через Compogo)
  • Вложенных конфигураций (через With())
  • Автозагрузки .env файлов

Установка

go get github.com/Compogo/viper

Быстрый старт

package main

import (
    "github.com/Compogo/compogo"
    "github.com/Compogo/viper"
)

func main() {
    app := compogo.NewApp("myapp",
        // Подключаем Viper как конфигуратор
        viper.WithViper(),
        
        // Другие опции
        compogo.WithContainer(container, containerCmp),
        compogo.WithLogger(logger, loggerCmp),
        compogo.WithOsSignalCloser(),
    )

    if err := app.Serve(); err != nil {
        panic(err)
    }
}

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

Чтение конфигурации
// Чтение значений
host := configurator.GetString("server.host")
port := configurator.GetInt("server.port")
timeout := configurator.GetDuration("server.timeout")
debug := configurator.GetBool("debug")
Вложенные конфигурации
// Работа с вложенными секциями
dbCfg := configurator.With("database")
dsn := dbCfg.GetString("dsn")
maxConn := dbCfg.GetInt("max_connections")
Настройка через флаги
# Путь к конфигурационным файлам
--config.path=./configs

# Имя файла (без расширения)
--config.name=app

# Тип файла
--config.type=yaml

# Замена символов в ключах переменных окружения
--config.env.replace.from=.
--config.env.replace.to=_

Приоритет источников

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

  • Значения по умолчанию (через SetDefault)
  • Переменные окружения (с заменой символов)
  • Файлы конфигурации (YAML, JSON, TOML)
  • Флаги командной строки (наивысший приоритет)

Пример конфигурации

Файл config.yaml:
server:
  host: localhost
  port: 8080
  timeout: 30s

database:
  dsn: postgres://localhost:5432/app
  max_connections: 100

logger:
  level: info
Чтение в коде:
type ServerConfig struct {
    Host    string
    Port    int
    Timeout time.Duration
}

func LoadServerConfig(cfg compogo.Configurator) *ServerConfig {
    return &ServerConfig{
        Host:    cfg.With("server").GetString("host"),
        Port:    cfg.With("server").GetInt("port"),
        Timeout: cfg.With("server").GetDuration("timeout"),
    }
}

Переменные окружения

Viper автоматически читает переменные окружения с заменой символов:

# Ключ "server.host" в конфигурации
export SERVER_HOST=0.0.0.0

# Ключ "database.dsn"
export DATABASE_DSN=postgres://prod:5432/app

Автозагрузка .env

Поддерживается автозагрузка .env файла через github.com/joho/godotenv/autoload:

# .env файл в корне проекта
SERVER_HOST=localhost
DATABASE_DSN=postgres://localhost:5432/app

Зависимости

  • Compogo — основной фреймворк
  • Viper — библиотека конфигурации
  • godotenv — загрузка .env файлов
  • cast — приведение типов

Лицензия

MIT License

Copyright (c) 2026 Compogo

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Documentation

Index

Constants

View Source
const (
	// PathFieldName — имя поля для пути к конфигурационным файлам.
	PathFieldName = "config.path"

	// NameFieldName — имя поля для имени конфигурационного файла (без расширения).
	NameFieldName = "config.name"

	// TypeFieldName — имя поля для типа конфигурационного файла (yaml, json, toml, и т.д.).
	TypeFieldName = "config.type"

	// EnvKeyReplaceFromFieldName — имя поля для замены в ключах переменных окружения (из).
	EnvKeyReplaceFromFieldName = "config.env.replace.from"

	// EnvKeyReplaceToFieldName — имя поля для замены в ключах переменных окружения (в).
	EnvKeyReplaceToFieldName = "config.env.replace.to"
)

Variables

View Source
var (
	// PathDefault — путь по умолчанию для конфигурационных файлов (текущая директория).
	PathDefault = "."

	// NameDefault — имя файла по умолчанию (config).
	NameDefault = "config"

	// TypeDefault — тип файла по умолчанию (yaml).
	TypeDefault = "yaml"

	// EnvKeyReplaceFromDefault — символ для замены в ключах переменных окружения по умолчанию (точка).
	EnvKeyReplaceFromDefault = "."

	// EnvKeyReplaceToDefault — символ, на который заменяется в ключах переменных окружения по умолчанию (подчёркивание).
	EnvKeyReplaceToDefault = "_"
)

Functions

func WithViper

func WithViper() compogo.Option

WithViper возвращает опцию для подключения Viper к приложению Compogo.

Пример:

app := compogo.NewApp("myapp",
    viper.WithViper(),
    // другие опции...
)

Types

type Config

type Config struct {
	Path              string
	Name              string
	Type              string
	EnvKeyReplaceFrom string
	EnvKeyReplaceTo   string
}

Config содержит настройки конфигуратора Viper.

func Configuration

func Configuration(config *Config) *Config

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

func NewConfig

func NewConfig() *Config

NewConfig создаёт новый объект конфигурации.

type Decorator

type Decorator struct {
	*viper.Viper
	// contains filtered or unexported fields
}

Decorator реализует интерфейс compogo.Configurator на основе Viper. Добавляет поддержку вложенных конфигураций через With().

Decorator автоматически:

  • Загружает конфигурацию из файлов (YAML, JSON, TOML)
  • Читает переменные окружения
  • Позволяет переопределять значения через флаги

func NewDecorator

func NewDecorator() *Decorator

NewDecorator создаёт новый декоратор Viper.

func (*Decorator) GetBool added in v0.0.9

func (decorator *Decorator) GetBool(s string) bool

GetBool возвращает булево значение по ключу.

func (*Decorator) GetDuration added in v0.0.9

func (decorator *Decorator) GetDuration(s string) time.Duration

GetDuration возвращает time.Duration значение по ключу.

func (*Decorator) GetFloat32

func (decorator *Decorator) GetFloat32(s string) float32

GetFloat32 возвращает float32 значение по ключу.

func (*Decorator) GetFloat64 added in v0.0.9

func (decorator *Decorator) GetFloat64(s string) float64

GetFloat64 возвращает float64 значение по ключу.

func (*Decorator) GetInt added in v0.0.9

func (decorator *Decorator) GetInt(s string) int

GetInt возвращает int значение по ключу.

func (*Decorator) GetInt8

func (decorator *Decorator) GetInt8(s string) int8

GetInt8 возвращает int8 значение по ключу.

func (*Decorator) GetInt16

func (decorator *Decorator) GetInt16(s string) int16

GetInt16 возвращает int16 значение по ключу.

func (*Decorator) GetInt32 added in v0.0.9

func (decorator *Decorator) GetInt32(s string) int32

GetInt32 возвращает int32 значение по ключу.

func (*Decorator) GetInt64 added in v0.0.9

func (decorator *Decorator) GetInt64(s string) int64

GetInt64 возвращает int64 значение по ключу.

func (*Decorator) GetIntSlice added in v0.0.9

func (decorator *Decorator) GetIntSlice(s string) []int

GetIntSlice возвращает []int значение по ключу.

func (*Decorator) GetSizeInBytes added in v0.0.9

func (decorator *Decorator) GetSizeInBytes(s string) uint

GetSizeInBytes возвращает размер в байтах по ключу (поддерживает 10MB, 1GB и т.д.).

func (*Decorator) GetString added in v0.0.9

func (decorator *Decorator) GetString(s string) string

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

func (*Decorator) GetStringMap added in v0.0.9

func (decorator *Decorator) GetStringMap(s string) map[string]any

GetStringMap возвращает map[string]any значение по ключу.

func (*Decorator) GetStringMapString added in v0.0.9

func (decorator *Decorator) GetStringMapString(s string) map[string]string

GetStringMapString возвращает map[string]string значение по ключу.

func (*Decorator) GetStringMapStringSlice added in v0.0.9

func (decorator *Decorator) GetStringMapStringSlice(s string) map[string][]string

GetStringMapStringSlice возвращает map[string][]string значение по ключу.

func (*Decorator) GetStringSlice added in v0.0.9

func (decorator *Decorator) GetStringSlice(s string) []string

GetStringSlice возвращает []string значение по ключу.

func (*Decorator) GetTime added in v0.0.9

func (decorator *Decorator) GetTime(s string) time.Time

GetTime возвращает time.Time значение по ключу.

func (*Decorator) GetUint added in v0.0.9

func (decorator *Decorator) GetUint(s string) uint

GetUint возвращает uint значение по ключу.

func (*Decorator) GetUint8 added in v0.0.9

func (decorator *Decorator) GetUint8(s string) uint8

GetUint8 возвращает uint8 значение по ключу.

func (*Decorator) GetUint16 added in v0.0.9

func (decorator *Decorator) GetUint16(s string) uint16

GetUint16 возвращает uint16 значение по ключу.

func (*Decorator) GetUint32 added in v0.0.9

func (decorator *Decorator) GetUint32(s string) uint32

GetUint32 возвращает uint32 значение по ключу.

func (*Decorator) GetUint64 added in v0.0.9

func (decorator *Decorator) GetUint64(s string) uint64

GetUint64 возвращает uint64 значение по ключу.

func (*Decorator) ReadConfig

func (decorator *Decorator) ReadConfig() (err error)

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

func (*Decorator) SetDefault added in v0.0.9

func (decorator *Decorator) SetDefault(s string, a any)

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

func (*Decorator) With added in v0.0.9

func (decorator *Decorator) With(s string) compogo.Configurator

With возвращает новый Configurator с указанным префиксом ключа. Позволяет работать с вложенными конфигурациями.

Пример:

dbCfg := configurator.With("database")
dsn := dbCfg.GetString("dsn") // читает ключ "database.dsn"

Jump to

Keyboard shortcuts

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