Spaces:
Running
Running
File size: 423 Bytes
a4468f1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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
}
|