This commit is contained in:
2023-06-06 21:18:40 +02:00
parent 1fbae343a4
commit c338d23070
14 changed files with 1076 additions and 9 deletions

View File

@@ -4,7 +4,7 @@ import (
"reflect"
)
var reflectBasicTypes = []reflect.Type{
var reflectBasicTypes = map[reflect.Kind]reflect.Type{
reflect.Bool: reflect.TypeOf(false),
reflect.Int: reflect.TypeOf(int(0)),
reflect.Int8: reflect.TypeOf(int8(0)),
@@ -109,3 +109,28 @@ func TryCast[T any](v any) (T, bool) {
return r4, true
}
func TryCastType(v any, dest reflect.Type) (any, bool) {
underlying := Underlying(reflect.TypeOf(v))
if underlying != Underlying(dest) {
return nil, false
}
r1 := reflect.ValueOf(v)
if !r1.CanConvert(underlying) {
return nil, false
}
r2 := r1.Convert(underlying)
if !r2.CanConvert(dest) {
return nil, false
}
r4 := r2.Convert(dest)
return r4.Interface(), true
}