diff --git a/config/default.go b/config/default.go index a59be9fc..e67f9051 100644 --- a/config/default.go +++ b/config/default.go @@ -173,6 +173,12 @@ func (c *defaultConfig) fillValues(ctx context.Context, valueOf reflect.Value) e continue } switch value.Kind() { + case reflect.Struct: + value.Set(reflect.Indirect(reflect.New(value.Type()))) + if err := c.fillValues(ctx, value); err != nil { + return err + } + continue case reflect.Ptr: if value.IsNil() { if value.Type().Elem().Kind() != reflect.Struct { diff --git a/config/default_test.go b/config/default_test.go index 8bdfc5bb..cc1dfaa1 100644 --- a/config/default_test.go +++ b/config/default_test.go @@ -11,6 +11,9 @@ import ( type Cfg struct { StringValue string `default:"string_value"` IntValue int `default:"99"` + StructValue struct { + StringValue string `default:"string_value"` + } } func TestDefault(t *testing.T) { @@ -50,7 +53,7 @@ func TestDefault(t *testing.T) { t.Fatal(err) } - if conf.StringValue != "string_value" || conf.IntValue != 99 { + if conf.StringValue != "string_value" || conf.IntValue != 99 || conf.StructValue.StringValue != "string_value" { t.Fatalf("load failed: %#+v", conf) } @@ -63,4 +66,5 @@ func TestDefault(t *testing.T) { t.Fatal("AfterLoad option not working") } + t.Logf("%#+v\n", conf) }