q5/reflect.go
aozhiwei 489449c65d 1
2024-08-06 22:28:19 +08:00

201 lines
3.2 KiB
Go

package q5
import (
"reflect"
)
func IsSimpleReflectKind(kind reflect.Kind) bool {
switch kind {
case reflect.Bool,
reflect.Int,
reflect.Int8,
reflect.Int16,
reflect.Int32,
reflect.Int64,
reflect.Uint,
reflect.Uint8,
reflect.Uint16,
reflect.Uint32,
reflect.Uint64,
reflect.Float32,
reflect.Float64,
reflect.String:
{
return true
}
default:
{
return false
}
}
}
func StrToSimpleReflectValue(val string, kind reflect.Kind) *reflect.Value {
switch kind {
case reflect.Bool:
{
v := reflect.ValueOf(val == "1" || val == "true")
return &v
}
case reflect.Int:
{
v := reflect.ValueOf(int(ToInt64(val)))
return &v
}
case reflect.Int8:
{
v := reflect.ValueOf(int8(ToInt64(val)))
return &v
}
case reflect.Int16:
{
v := reflect.ValueOf(int16(ToInt64(val)))
return &v
}
case reflect.Int32:
{
v := reflect.ValueOf(int32(ToInt64(val)))
return &v
}
case reflect.Int64:
{
v := reflect.ValueOf(ToInt64(val))
return &v
}
case reflect.Uint:
{
v := reflect.ValueOf(uint(ToInt64(val)))
return &v
}
case reflect.Uint8:
{
v := reflect.ValueOf(uint8(ToInt64(val)))
return &v
}
case reflect.Uint16:
{
v := reflect.ValueOf(uint16(ToInt64(val)))
return &v
}
case reflect.Uint32:
{
v := reflect.ValueOf(uint32(ToInt64(val)))
return &v
}
case reflect.Uint64:
{
v := reflect.ValueOf(uint64(ToInt64(val)))
return &v
}
case reflect.Float32,
reflect.Float64:
{
v := reflect.ValueOf(ToFloat64(val))
return &v
}
case reflect.String:
{
v := reflect.ValueOf(val)
return &v
}
default:
{
return nil
}
}
}
func StrToSimplePtrReflectValue(val string, kind reflect.Kind) *reflect.Value {
result := reflect.Value{}
switch kind {
case reflect.Bool:
{
v := val == "1" || val == "true"
result = reflect.ValueOf(&v)
return &result
}
case reflect.Int:
{
v := int(ToInt64(val))
result = reflect.ValueOf(&v)
return &result
}
case reflect.Int8:
{
v := int8(ToInt64(val))
result = reflect.ValueOf(&v)
return &result
}
case reflect.Int16:
{
v := int16(ToInt64(val))
result = reflect.ValueOf(&v)
return &result
}
case reflect.Int32:
{
v := int32(ToInt64(val))
result = reflect.ValueOf(&v)
return &result
}
case reflect.Int64:
{
v := ToInt64(val)
result = reflect.ValueOf(&v)
return &result
}
case reflect.Uint:
{
v := uint(ToInt64(val))
result = reflect.ValueOf(&v)
return &result
}
case reflect.Uint8:
{
v := uint8(ToInt64(val))
result = reflect.ValueOf(&v)
return &result
}
case reflect.Uint16:
{
v := uint16(ToInt64(val))
result = reflect.ValueOf(&v)
return &result
}
case reflect.Uint32:
{
v := uint32(ToInt64(val))
result = reflect.ValueOf(&v)
return &result
}
case reflect.Uint64:
{
v := uint64(ToInt64(val))
result = reflect.ValueOf(&v)
return &result
}
case reflect.Float32:
{
v := float32(ToFloat64(val))
result = reflect.ValueOf(&v)
return &result
}
case reflect.Float64:
{
v := float64(ToFloat64(val))
result = reflect.ValueOf(&v)
return &result
}
case reflect.String:
{
v := val
result = reflect.ValueOf(&v)
return &result
}
default:
{
return nil
}
}
}