kpl / pkg /pointer /pointer.go
aurorax-neo's picture
init
a4468f1
raw
history blame contribute delete
423 Bytes
package pointer
import "reflect"
func To[T any](v T) *T {
vo := reflect.ValueOf(v)
for {
if vo.Kind() == reflect.Ptr {
vo = vo.Elem()
} else {
break
}
}
if vo.IsZero() {
return nil
}
return &v
}
func Take[T any](v *T) T {
if v == nil {
t := reflect.TypeOf(v)
_v := reflect.New(t)
for t.Kind() == reflect.Ptr {
t = t.Elem()
_v = _v.Elem()
}
return _v.Interface().(T)
}
return *v
}