A config file manager for Go that uses a defaults and overrides file.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
1.7 KiB

2 years ago
# YamlSettings for Go
This is a config file manager for Go, inspired by Python
[yamlsettings](https://github.com/KyleJamesWalker/yamlsettings).
## Example
Your Go code:
```go
import "git.kirsle.net/go/yamlsettings"
// Typedef for your config object.
type Config struct {
Database struct {
Host string `yaml:"host"`
Port string `yaml:"port"`
User string `yaml:"user"`
Password string `yaml:"passwd"`
} `yaml:"database"`
Redis struct {
Host string `yaml:"redis_host"`
Port int `yaml:"redis_port"`
} `yaml:"redis"`
Debug bool `yaml:"DEBUG"`
SecretKey string `yaml:"SECRET_KEY"`
}
func main() {
// Marshal your app config from the defaults + settings files.
// Only the defaults.yml should exist on disk; the settings.yml is
// optional and will be ignored if not found.
var setting Config
err := yamlsettings.LoadFiles(
"defaults.yml", "settings.yml",
&setting,
)
if err != nil {
panic(err)
}
fmt.Printf("Redis host: %s\n", settings.Redis.Host)
}
```
Your defaults.yml file can be committed to version control. It uses sensible
defaults and has dummy text in place of passwords and needed configuration:
```yaml
---
database:
host: "localhost"
port: 5432
user: "postgres"
passwd: "postgres"
redis:
host: "localhost"
port: 6379
DEBUG: false
SECRET_KEY: "!! CHANGE ME !!"
```
The settings.yml file can override values from the defaults file. This
file goes in your `.gitignore` to avoid accidentally committing secrets
to version control!
```yaml
---
database:
host: "pgprod.example.com"
user: "pgprod_admin"
passwd: "big secret long password"
SECRET_KEY: "fd09s0sfv0dhgf098sasd"
```
## License
MIT. © 2020 Noah Petherbridge.