fix(reflectutil): correct pointer type check in dereference logic
This commit is contained in:
@@ -8,7 +8,7 @@ import (
|
|||||||
// Deref dereferences pointers until it reaches a non-pointer value
|
// 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
|
// Returns the dereferenced value and true if successful, or the original value and false if nil
|
||||||
func Deref(v reflect.Value) (reflect.Value, bool) {
|
func Deref(v reflect.Value) (reflect.Value, bool) {
|
||||||
for v.Kind() == reflect.Ptr {
|
for v.Kind() == reflect.Pointer {
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
return v, false
|
return v, false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ func Has(m interface{}, key interface{}) bool {
|
|||||||
v := reflect.ValueOf(m)
|
v := reflect.ValueOf(m)
|
||||||
|
|
||||||
// Dereference pointers
|
// Dereference pointers
|
||||||
for v.Kind() == reflect.Ptr {
|
for v.Kind() == reflect.Pointer {
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -102,7 +102,7 @@ func Merge(maps ...interface{}) map[interface{}]interface{} {
|
|||||||
v := reflect.ValueOf(m)
|
v := reflect.ValueOf(m)
|
||||||
|
|
||||||
// Dereference pointers
|
// Dereference pointers
|
||||||
for v.Kind() == reflect.Ptr {
|
for v.Kind() == reflect.Pointer {
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -129,7 +129,7 @@ func Pick(m interface{}, keys ...interface{}) map[interface{}]interface{} {
|
|||||||
v := reflect.ValueOf(m)
|
v := reflect.ValueOf(m)
|
||||||
|
|
||||||
// Dereference pointers
|
// Dereference pointers
|
||||||
for v.Kind() == reflect.Ptr {
|
for v.Kind() == reflect.Pointer {
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
@@ -158,7 +158,7 @@ func Omit(m interface{}, keys ...interface{}) map[interface{}]interface{} {
|
|||||||
v := reflect.ValueOf(m)
|
v := reflect.ValueOf(m)
|
||||||
|
|
||||||
// Dereference pointers
|
// Dereference pointers
|
||||||
for v.Kind() == reflect.Ptr {
|
for v.Kind() == reflect.Pointer {
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
@@ -237,7 +237,7 @@ func Pluck(slice interface{}, field string) []interface{} {
|
|||||||
v := reflect.ValueOf(slice)
|
v := reflect.ValueOf(slice)
|
||||||
|
|
||||||
// Dereference pointers
|
// Dereference pointers
|
||||||
for v.Kind() == reflect.Ptr {
|
for v.Kind() == reflect.Pointer {
|
||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
return []interface{}{}
|
return []interface{}{}
|
||||||
}
|
}
|
||||||
@@ -253,13 +253,18 @@ func Pluck(slice interface{}, field string) []interface{} {
|
|||||||
item := v.Index(i)
|
item := v.Index(i)
|
||||||
|
|
||||||
// Dereference item pointers
|
// Dereference item pointers
|
||||||
for item.Kind() == reflect.Ptr {
|
nilItem := false
|
||||||
|
for item.Kind() == reflect.Pointer {
|
||||||
if item.IsNil() {
|
if item.IsNil() {
|
||||||
result = append(result, nil)
|
result = append(result, nil)
|
||||||
continue
|
nilItem = true
|
||||||
|
break
|
||||||
}
|
}
|
||||||
item = item.Elem()
|
item = item.Elem()
|
||||||
}
|
}
|
||||||
|
if nilItem {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
switch item.Kind() {
|
switch item.Kind() {
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
|
|||||||
Reference in New Issue
Block a user