diff --git a/envconf.go b/envconf.go index 70657ee..a278bc6 100644 --- a/envconf.go +++ b/envconf.go @@ -91,17 +91,28 @@ func (c *Config) Parse() { return } c.parsed = true + failed := false for k, v := range c.env { if v.empty { if v.unset { - v.parsed.err = errors.New(fmt.Sprintf(`Environment variable "%s" not found. It should have been of type %s.`, k, v.dtype)) - c.env[k] = v + failed = true } } else { v.parsed = v.dtype.parse(k, v.value) c.env[k] = v } } + for k, v := range c.env { + if failed && (v.parsed.err == nil) { + if v.unset { + v.parsed.err = errors.New(fmt.Sprintf(`Environment variable "%s" not found. It should have been of type %s.`, k, v.dtype)) + c.env[k] = v + } else { + v.parsed.err = errors.New(fmt.Sprintf(`Environment variable "%s" not found. Default value of "%s"(%s) used.`, k, v.value, v.dtype)) + c.env[k] = v + } + } + } } // Status prints out failures that occured while parsing the environment to os.Stderr.