Adding Support for Environment variable prefixes
diff --git a/viper.go b/viper.go
index f942d92..d075a95 100644
--- a/viper.go
+++ b/viper.go
@@ -74,6 +74,7 @@
configName string
configFile string
configType string
+ envPrefix string
config map[string]interface{}
override map[string]interface{}
@@ -125,6 +126,22 @@
}
}
+// Define a prefix that ENVIRONMENT variables will use.
+func SetEnvPrefix(in string) { v.SetEnvPrefix(in) }
+func (v *viper) SetEnvPrefix(in string) {
+ if in != "" {
+ v.envPrefix = in
+ }
+}
+
+func (v *viper) mergeWithEnvPrefix(in string) string {
+ if v.envPrefix != "" {
+ return v.envPrefix + "_" + in
+ }
+
+ return in
+}
+
// Return the config file used
func ConfigFileUsed() string { return v.ConfigFileUsed() }
func (v *viper) ConfigFileUsed() string { return v.configFile }
@@ -342,6 +359,7 @@
// Binds a viper key to a ENV variable
// ENV variables are case sensitive
// If only a key is provided, it will use the env key matching the key, uppercased.
+// EnvPrefix will be used when set when env name is not provided.
func BindEnv(input ...string) (err error) { return v.BindEnv(input...) }
func (v *viper) BindEnv(input ...string) (err error) {
var key, envkey string
@@ -352,7 +370,7 @@
key = strings.ToLower(input[0])
if len(input) == 1 {
- envkey = strings.ToUpper(key)
+ envkey = strings.ToUpper(v.mergeWithEnvPrefix(key))
} else {
envkey = input[1]
}