diff --git a/internal/helper/helper.go b/internal/helper/helper.go index aed21afa..e44ee41c 100644 --- a/internal/helper/helper.go +++ b/internal/helper/helper.go @@ -135,14 +135,16 @@ func SetDefaults(needsDefaults interface{}) error { } // special case for pointer to bools } else if field.Type().Elem() == reflect.TypeOf(true) { - // make sure the pointer is never nil in case no value - // was set - if field.IsNil() { - field.Set(reflect.ValueOf(BoolPtr(false))) + // if a value is set, do nothing + if !field.IsNil() { + continue } tags := elem.Type().Field(i).Tag defaultValue, hasDefault := tags.Lookup("default") if !hasDefault { + // If no default and no value is set, make sure we have a valid + // value consistent with the "zero" value for a bool (false) + field.Set(reflect.ValueOf(BoolPtr(false))) continue } if defaultValue == "true" { diff --git a/internal/helper/helper_test.go b/internal/helper/helper_test.go index 58532fa9..6dc6e721 100644 --- a/internal/helper/helper_test.go +++ b/internal/helper/helper_test.go @@ -230,7 +230,7 @@ func TestSetDefaults(t *testing.T) { }, want: &S2{ A: "test", - B: BoolPtr(true), + B: BoolPtr(false), C: BoolPtr(false), D: BoolPtr(true), },