Documentation
¶
Overview ¶
Package config provides enterprise-standard configuration management wrapping Viper.
This package offers typed configuration with automatic .env file loading, environment variable precedence, and comprehensive validation.
Index ¶
- func LoadEnvFile(paths ...string) error
- func ValidateDuration(field string, duration time.Duration) error
- func ValidatePort(field string, port int) error
- func ValidatePositive(field string, value int) error
- func ValidateRange[T int | float64](field string, value, min, max T) error
- func ValidateRequired(field, value string) error
- type DatabaseConfig
- type OpenAIConfig
- type Option
- type ServerConfig
- type Standard
- func (s *Standard) AllKeys() []string
- func (s *Standard) BindEnv(key string, envVars ...string) error
- func (s *Standard) Get(key string) interface{}
- func (s *Standard) GetBool(key string) bool
- func (s *Standard) GetDuration(key string) interface{}
- func (s *Standard) GetInt(key string) int
- func (s *Standard) GetString(key string) string
- func (s *Standard) IsSet(key string) bool
- func (s *Standard) Set(key string, value interface{})
- func (s *Standard) Unmarshal(rawVal interface{}) error
- func (s *Standard) Viper() *viper.Viper
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func LoadEnvFile ¶
LoadEnvFile loads environment variables from a .env file. Does not override existing environment variables. Silently succeeds if the file doesn't exist.
func ValidateDuration ¶
ValidateDuration validates that a duration is positive
func ValidatePort ¶
ValidatePort validates that a port number is in the valid range (1-65535)
func ValidatePositive ¶
ValidatePositive validates that an integer is positive (> 0)
func ValidateRange ¶
ValidateRange validates that a value is within a range (inclusive)
func ValidateRequired ¶
ValidateRequired validates that a string field is not empty
Types ¶
type DatabaseConfig ¶
type DatabaseConfig struct {
Host string `mapstructure:"host"`
Port int `mapstructure:"port"`
Database string `mapstructure:"database"`
User string `mapstructure:"user"`
Password string `mapstructure:"password"`
SSLMode string `mapstructure:"ssl_mode"`
// Connection pool settings
MaxConns int `mapstructure:"max_conns"`
MinConns int `mapstructure:"min_conns"`
ConnMaxLifetime time.Duration `mapstructure:"conn_max_lifetime"`
ConnMaxIdleTime time.Duration `mapstructure:"conn_max_idle_time"`
// Retry settings
RetryAttempts int `mapstructure:"retry_attempts"`
RetryDelay time.Duration `mapstructure:"retry_delay"`
// Health check
HealthCheckPeriod time.Duration `mapstructure:"health_check_period"`
}
DatabaseConfig holds PostgreSQL database configuration with connection pooling settings.
func DatabaseConfigFromViper ¶
func DatabaseConfigFromViper(s *Standard) DatabaseConfig
DatabaseConfigFromViper creates a DatabaseConfig from a Standard config loader.
Environment variable mappings:
- DB_HOST -> host (default: localhost)
- DB_PORT -> port (default: 5432)
- DB_NAME or DB_DATABASE -> database (default: postgres)
- DB_USER or DB_USERNAME -> user (default: postgres)
- DB_PASSWORD or DB_PASS -> password
- DB_SSLMODE -> ssl_mode (default: disable)
- DB_MAX_CONNS -> max_conns (default: 25)
- DB_MIN_CONNS -> min_conns (default: 5)
- DB_CONN_MAX_LIFETIME -> conn_max_lifetime (default: 1h)
- DB_CONN_MAX_IDLE_TIME -> conn_max_idle_time (default: 10m)
- DB_RETRY_ATTEMPTS -> retry_attempts (default: 3)
- DB_RETRY_DELAY -> retry_delay (default: 2s)
- DB_HEALTH_CHECK_PERIOD -> health_check_period (default: 30s)
func (*DatabaseConfig) ConnectionString ¶
func (c *DatabaseConfig) ConnectionString() string
ConnectionString returns a PostgreSQL connection string
func (*DatabaseConfig) Validate ¶
func (c *DatabaseConfig) Validate() error
Validate validates the database configuration
type OpenAIConfig ¶
type OpenAIConfig struct {
APIKey string `mapstructure:"api_key"`
Model string `mapstructure:"model"`
Temperature float64 `mapstructure:"temperature"`
MaxTokens int `mapstructure:"max_tokens"`
Timeout time.Duration `mapstructure:"timeout"`
}
OpenAIConfig holds OpenAI API configuration
func OpenAIConfigFromViper ¶
func OpenAIConfigFromViper(s *Standard) OpenAIConfig
OpenAIConfigFromViper creates an OpenAIConfig from a Standard config loader.
Environment variable mappings:
- OPENAI_API_KEY -> api_key (required)
- OPENAI_MODEL -> model (default: gpt-3.5-turbo)
- OPENAI_TEMPERATURE -> temperature (default: 0.7)
- OPENAI_MAX_TOKENS -> max_tokens (default: 2000)
- OPENAI_TIMEOUT -> timeout (default: 30s)
func (*OpenAIConfig) Validate ¶
func (c *OpenAIConfig) Validate() error
Validate validates the OpenAI configuration
type Option ¶
Option configures the Standard config loader using the functional options pattern.
func WithConfigFile ¶
WithConfigFile specifies a config file to load (YAML, JSON, TOML, etc.)
func WithConfigName ¶
WithConfigName sets the name of the config file to search for (without extension)
func WithConfigPaths ¶
WithConfigPaths adds paths to search for the config file
func WithConfigType ¶
WithConfigType sets the type of the config file (yaml, json, toml, etc.)
func WithEnvFile ¶
WithEnvFile loads environment variables from a specific .env file
func WithEnvPrefix ¶
WithEnvPrefix sets the environment variable prefix (default: APP_)
func WithoutEnvFile ¶
func WithoutEnvFile() Option
WithoutEnvFile disables automatic .env file loading
type ServerConfig ¶
type ServerConfig struct {
Host string `mapstructure:"host"`
Port int `mapstructure:"port"`
ReadTimeout time.Duration `mapstructure:"read_timeout"`
WriteTimeout time.Duration `mapstructure:"write_timeout"`
IdleTimeout time.Duration `mapstructure:"idle_timeout"`
}
ServerConfig holds HTTP server configuration
func ServerConfigFromViper ¶
func ServerConfigFromViper(s *Standard) ServerConfig
ServerConfigFromViper creates a ServerConfig from a Standard config loader.
Environment variable mappings:
- SERVER_HOST -> host (default: localhost)
- SERVER_PORT -> port (default: 8080)
- SERVER_READ_TIMEOUT -> read_timeout (default: 15s)
- SERVER_WRITE_TIMEOUT -> write_timeout (default: 15s)
- SERVER_IDLE_TIMEOUT -> idle_timeout (default: 60s)
func (*ServerConfig) Address ¶
func (c *ServerConfig) Address() string
Address returns the server address in host:port format
func (*ServerConfig) Validate ¶
func (c *ServerConfig) Validate() error
Validate validates the server configuration
type Standard ¶
type Standard struct {
// contains filtered or unexported fields
}
Standard wraps Viper to provide enterprise-standard configuration loading with automatic .env file support, environment variable precedence, and validation.
func NewStandard ¶
NewStandard creates a new Standard config loader with the given options.
By default: - Loads .env files from current directory (silently ignored if missing) - Reads environment variables with APP_ prefix - Replaces dots and hyphens with underscores in env var names
Options can override any of these defaults.
func (*Standard) BindEnv ¶
BindEnv binds a config key to environment variables. With no envVars argument, it uses the key as the env var name. With one or more envVars, it checks each in order until finding a set value.
func (*Standard) GetDuration ¶
GetDuration retrieves a duration value