97 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Env Source
 | |
| 
 | |
| The env source reads config from environment variables
 | |
| 
 | |
| ## Format
 | |
| 
 | |
| We expect environment variables to be in the standard format of FOO=bar
 | |
| 
 | |
| Keys are converted to lowercase and split on underscore.
 | |
| 
 | |
| 
 | |
| ### Example
 | |
| 
 | |
| ```
 | |
| DATABASE_ADDRESS=127.0.0.1
 | |
| DATABASE_PORT=3306
 | |
| ```
 | |
| 
 | |
| Becomes
 | |
| 
 | |
| ```json
 | |
| {
 | |
|     "database": {
 | |
|         "address": "127.0.0.1",
 | |
|         "port": 3306
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Prefixes
 | |
| 
 | |
| Environment variables can be namespaced so we only have access to a subset. Two options are available:
 | |
| 
 | |
| ```
 | |
| WithPrefix(p ...string)
 | |
| WithStrippedPrefix(p ...string)
 | |
| ```
 | |
| 
 | |
| The former will preserve the prefix and make it a top level key in the config. The latter eliminates the prefix, reducing the nesting by one. 
 | |
| 
 | |
| #### Example:
 | |
| 
 | |
| Given ENVs of:
 | |
| 
 | |
| ```
 | |
| APP_DATABASE_ADDRESS=127.0.0.1
 | |
| APP_DATABASE_PORT=3306
 | |
| VAULT_ADDR=vault:1337
 | |
| ```
 | |
| 
 | |
| and a source initialized as follows:
 | |
| 
 | |
| ```
 | |
| src := env.NewSource(
 | |
|     env.WithPrefix("VAULT"),
 | |
|     env.WithStrippedPrefix("APP"),
 | |
| )
 | |
| ```
 | |
| 
 | |
| The resulting config will be:
 | |
| 
 | |
| ```
 | |
| {
 | |
|     "database": {
 | |
|         "address": "127.0.0.1",
 | |
|         "port": 3306
 | |
|     },
 | |
|     "vault": {
 | |
|         "addr": "vault:1337"
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| 
 | |
| ## New Source
 | |
| 
 | |
| Specify source with data
 | |
| 
 | |
| ```go
 | |
| src := env.NewSource(
 | |
| 	// optionally specify prefix
 | |
| 	env.WithPrefix("MICRO"),
 | |
| )
 | |
| ```
 | |
| 
 | |
| ## Load Source
 | |
| 
 | |
| Load the source into config
 | |
| 
 | |
| ```go
 | |
| // Create new config
 | |
| conf := config.NewConfig()
 | |
| 
 | |
| // Load env source
 | |
| conf.Load(src)
 | |
| ```
 |