From a8b11353a47a8f78cf0cfc66d245b80fc2ed4459 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Sun, 26 Nov 2017 03:31:51 +0100 Subject: [PATCH] Fixed nested config structure bug --- util/config.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/util/config.go b/util/config.go index 8930792..b32a871 100644 --- a/util/config.go +++ b/util/config.go @@ -65,13 +65,17 @@ func ReadInConfig() error { } func (c *Configuration) ApplyEnvironmentConfig() error { - return c.setDefaultValue(reflect.ValueOf(c), reflect.TypeOf(*c), reflect.StructField{}, "GUS") + return c.setDefaultValue(reflect.ValueOf(c), reflect.TypeOf(*c), -1, "GUS") } -func (c *Configuration) setDefaultValue(v reflect.Value, t reflect.Type, f reflect.StructField, prefix string) error { +func (c *Configuration) setDefaultValue(v reflect.Value, t reflect.Type, counter int, prefix string) error { if v.Kind() != reflect.Ptr { return errors.New("Not a pointer value") } + f := reflect.StructField{} + if counter != -1 { + f = t.Field(counter) + } v = reflect.Indirect(v) fieldEnv, exists := f.Tag.Lookup("env") env := os.Getenv(prefix + fieldEnv) @@ -96,9 +100,8 @@ func (c *Configuration) setDefaultValue(v reflect.Value, t reflect.Type, f refle } } if v.Kind() == reflect.Struct { - // Iterate over the struct fields for i := 0; i < v.NumField(); i++ { - if err := c.setDefaultValue(v.Field(i).Addr(), t, t.Field(i), prefix+fieldEnv+"_"); err != nil { + if err := c.setDefaultValue(v.Field(i).Addr(), v.Type(), i, prefix+fieldEnv+"_"); err != nil { return err } }