forked from mirror/viper
Adding first draft of README.
This commit is contained in:
parent
bcb02e2472
commit
a54c415b55
90
README.md
90
README.md
|
@ -2,3 +2,93 @@ viper
|
|||
=====
|
||||
|
||||
Go configuration with fangs
|
||||
|
||||
## What is Viper?
|
||||
|
||||
Viper is a complete configuration solution. Designed to work within an
|
||||
application to handle file based configuration and seamlessly marry that with
|
||||
command line flags which can also be used to control application behavior.
|
||||
|
||||
## Why Viper?
|
||||
|
||||
When building a modern application you don’t want to have to worry about
|
||||
configuration file formats, you want to focus on building awesome software.
|
||||
Viper is here to help with that.
|
||||
|
||||
Viper does the following for you:
|
||||
|
||||
1. Find, load and marshall a configuration file in YAML, TOML or JSON.
|
||||
2. Provide a mechanism to setDefault values for your different configuration options
|
||||
3. Provide a mechanism to setOverride values for options specified through command line flags.
|
||||
4. Provide an alias system to easily rename parameters without breaking existing code.
|
||||
5. Make it easy to tell the difference between when a user has provided a command line or config file which is the same as the default.
|
||||
|
||||
Viper believes that:
|
||||
|
||||
1. command line flags take precedence over options set in config files
|
||||
2. config files take precedence over defaults
|
||||
|
||||
Config files often can be found in multiple locations. Viper allows you to set
|
||||
multiple paths to search for the config file in.
|
||||
|
||||
Viper configuration keys are case insensitive.
|
||||
|
||||
## Usage
|
||||
|
||||
### Initialization
|
||||
|
||||
viper.SetConfigName("config") // name of config file (without extension)
|
||||
viper.AddConfigPath("/etc/appname/") // path to look for the config file in
|
||||
viper.AddConfigPath("$HOME/.appname") // call multiple times to add many search paths
|
||||
viper.ReadInConfig() // Find and read the config file
|
||||
|
||||
### Setting Defaults
|
||||
|
||||
viper.SetDefault("ContentDir", "content")
|
||||
viper.SetDefault("LayoutDir", "layouts")
|
||||
viper.SetDefault("Indexes", map[string]string{"tag": "tags", "category": "categories"})
|
||||
|
||||
### Setting Overrides
|
||||
|
||||
viper.Set("Verbose", true)
|
||||
viper.Set("LogFile", LogFile)
|
||||
|
||||
### Registering and Using Aliases
|
||||
|
||||
viper.RegisterAlias("loud", "Verbose")
|
||||
|
||||
viper.Set("verbose", true) // same result as next line
|
||||
viper.Set("loud", true) // same result as prior line
|
||||
|
||||
viper.GetBool("loud") // true
|
||||
viper.GetBool("verbose") // true
|
||||
|
||||
### Getting Values
|
||||
|
||||
viper.GetString("logfile") // case insensitive Setting & Getting
|
||||
if viper.GetBool("verbose") {
|
||||
fmt.Println("verbose enabled")
|
||||
}
|
||||
|
||||
|
||||
## Q & A
|
||||
|
||||
Q: Why not INI files?
|
||||
|
||||
A: Ini files are pretty awful. There’s no standard format and they are hard to
|
||||
validate. Viper is designed to work with YAML, TOML or JSON files. If someone
|
||||
really wants to add this feature, I’d be happy to merge it. It’s easy to
|
||||
specify which formats your application will permit.
|
||||
|
||||
Q: Why viper?
|
||||
|
||||
A: Viper is designed to be a companion to
|
||||
[Cobra](http://github.com/spf13/cobra). While both can operate completely
|
||||
independently, together they make a powerful pair to handle much of your
|
||||
application foundation needs.
|
||||
|
||||
Q: Why Cobra?
|
||||
|
||||
A: Is there a better name for a commander?
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue