How do I load configuration from YAML and env vars in Go?

Loading configuration in Go can be achieved easily using YAML files alongside environment variables. This approach allows you to manage your application settings in a structured way, improving maintainability and clarity.

Example Code

package main import ( "encoding/json" "io/ioutil" "log" "os" "gopkg.in/yaml.v2" ) type Config struct { Database DatabaseConfig `yaml:"database"` Port int `yaml:"port"` } type DatabaseConfig struct { Host string `yaml:"host"` Username string `yaml:"username"` Password string `yaml:"password"` } func LoadConfig() (*Config, error) { var config Config // Load from YAML file yamlFile, err := ioutil.ReadFile("config.yaml") if err != nil { return nil, err } err = yaml.Unmarshal(yamlFile, &config) if err != nil { return nil, err } // Override with environment variables if set if envPort := os.Getenv("APP_PORT"); envPort != "" { fmt.Sscanf(envPort, "%d", &config.Port) } if envDbHost := os.Getenv("DB_HOST"); envDbHost != "" { config.Database.Host = envDbHost } if envDbUser := os.Getenv("DB_USERNAME"); envDbUser != "" { config.Database.Username = envDbUser } if envDbPass := os.Getenv("DB_PASSWORD"); envDbPass != "" { config.Database.Password = envDbPass } return &config, nil } func main() { config, err := LoadConfig() if err != nil { log.Fatalf("Failed to load config: %v", err) } log.Printf("Configuration Loaded: %+v", config) }

Go YAML Configuration Environment Variables Golang