diff --git a/pkg/reflectutil/helpers.go b/pkg/reflectutil/helpers.go index 868c164..6043f36 100644 --- a/pkg/reflectutil/helpers.go +++ b/pkg/reflectutil/helpers.go @@ -8,7 +8,7 @@ import ( // Deref dereferences pointers until it reaches a non-pointer value // Returns the dereferenced value and true if successful, or the original value and false if nil func Deref(v reflect.Value) (reflect.Value, bool) { - for v.Kind() == reflect.Ptr { + for v.Kind() == reflect.Pointer { if v.IsNil() { return v, false } diff --git a/pkg/writers/template/safe_access.go b/pkg/writers/template/safe_access.go index 5f1feb6..7ff713a 100644 --- a/pkg/writers/template/safe_access.go +++ b/pkg/writers/template/safe_access.go @@ -60,7 +60,7 @@ func Has(m interface{}, key interface{}) bool { v := reflect.ValueOf(m) // Dereference pointers - for v.Kind() == reflect.Ptr { + for v.Kind() == reflect.Pointer { if v.IsNil() { return false } @@ -102,7 +102,7 @@ func Merge(maps ...interface{}) map[interface{}]interface{} { v := reflect.ValueOf(m) // Dereference pointers - for v.Kind() == reflect.Ptr { + for v.Kind() == reflect.Pointer { if v.IsNil() { continue } @@ -129,7 +129,7 @@ func Pick(m interface{}, keys ...interface{}) map[interface{}]interface{} { v := reflect.ValueOf(m) // Dereference pointers - for v.Kind() == reflect.Ptr { + for v.Kind() == reflect.Pointer { if v.IsNil() { return result } @@ -158,7 +158,7 @@ func Omit(m interface{}, keys ...interface{}) map[interface{}]interface{} { v := reflect.ValueOf(m) // Dereference pointers - for v.Kind() == reflect.Ptr { + for v.Kind() == reflect.Pointer { if v.IsNil() { return result } @@ -237,7 +237,7 @@ func Pluck(slice interface{}, field string) []interface{} { v := reflect.ValueOf(slice) // Dereference pointers - for v.Kind() == reflect.Ptr { + for v.Kind() == reflect.Pointer { if v.IsNil() { return []interface{}{} } @@ -253,13 +253,18 @@ func Pluck(slice interface{}, field string) []interface{} { item := v.Index(i) // Dereference item pointers - for item.Kind() == reflect.Ptr { + nilItem := false + for item.Kind() == reflect.Pointer { if item.IsNil() { result = append(result, nil) - continue + nilItem = true + break } item = item.Elem() } + if nilItem { + continue + } switch item.Kind() { case reflect.Struct: