config package provides a comprehensive configuration management solution that merges settings from multiple sources: configuration files, environment variables, command-line flags, and default values.
Features
- Multiple Sources: Merge config from YAML files, environment variables, and CLI flags
- Priority Order: Command-line flags → Environment variables → Config file → Defaults
- Validation: Built-in struct validation using
go-playground/validator - Type Safety: Strongly-typed configuration with struct tags
- Dynamic Binding: Automatic flag binding using reflection
- App Config Support: Platform-specific configuration file paths
Installation
Quick Start
Core Types
Loader
Option
Creating a Loader
NewLoader
Loader Options
WithFile
WithEnvPrefix
WithFlags
cmdx struct tags.
WithAppConfig
- Linux/Mac:
~/.config/raystack/<app>.yml - Windows:
%APPDATA%\raystack\<app>.yml
Loader Methods
Load
- Command-line flags (highest)
- Environment variables
- Configuration file
- Default values (lowest)
Init
Get
Set
Save
View
Struct Tags
Configure your structs using the following tags:mapstructure
Maps configuration keys to struct fields.default
Specifies default values.validate
Defines validation rules usinggo-playground/validator syntax.
cmdx
Binds command-line flags when usingWithFlags option.
Configuration File Example
config.yaml:Environment Variables
WithWithEnvPrefix("MYAPP"), you can override configuration:
Complete Example with Flags
Best Practices
Use Validation Tags
Use Validation Tags
Provide Sensible Defaults
Provide Sensible Defaults
Use
default tags for non-critical settings:Document Configuration
Document Configuration
Use struct comments to document configuration options:
Group Related Settings
Group Related Settings
Error Handling
TheLoad method returns detailed errors for:
- Missing files: Returns warning, falls back to defaults
- Invalid struct: Returns error if not a pointer to struct
- Validation failures: Returns detailed validation errors
- Type mismatches: Returns unmarshal errors