This commit is contained in:
John Guo
2022-03-10 21:12:24 +08:00
parent 87b1433473
commit afa1f78a02
4 changed files with 164 additions and 15 deletions

View File

@ -62,3 +62,28 @@ func OriginTypeAndKind(value interface{}) (out OriginTypeAndKindOutput) {
}
return
}
// ReflectValueToInterface converts reflect value to its interface type.
func ReflectValueToInterface(v reflect.Value) (value interface{}, ok bool) {
if v.IsValid() && v.CanInterface() {
return v.Interface(), true
}
switch v.Kind() {
case reflect.Bool:
return v.Bool(), true
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
return v.Int(), true
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
return v.Uint(), true
case reflect.Float32, reflect.Float64:
return v.Float(), true
case reflect.Complex64, reflect.Complex128:
return v.Complex(), true
case reflect.String:
return v.String(), true
case reflect.Ptr:
return ReflectValueToInterface(v.Elem())
default:
return nil, false
}
}