github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/ginx/anyfn/ptr.go (about) 1 package anyfn 2 3 import "reflect" 4 5 func ConvertPtr(isPtr bool, v reflect.Value) reflect.Value { 6 if !isPtr { 7 return reflect.Indirect(v) 8 } 9 10 if v.Kind() == reflect.Ptr { 11 return v 12 } 13 14 p := reflect.New(v.Type()) 15 p.Elem().Set(v) 16 17 return p 18 } 19 20 // IndirectTypeOf returns the non-ptr type of v. 21 func IndirectTypeOf(v interface{}) reflect.Type { 22 if v == nil { 23 return reflect.TypeOf(v) 24 } 25 26 var t reflect.Type 27 if vt, ok1 := v.(reflect.Type); ok1 { 28 t = vt 29 } else if vt, ok2 := v.(reflect.Value); ok2 { 30 t = vt.Type() 31 } else { 32 t = reflect.TypeOf(v) 33 } 34 35 if t.Kind() == reflect.Ptr { 36 t = t.Elem() 37 } 38 39 return t 40 }