github.com/best4tires/kit@v1.0.5/reflex/reflect.go (about) 1 package reflex 2 3 import ( 4 "reflect" 5 "strings" 6 ) 7 8 func findFieldValue(v any, field string) (any, bool) { 9 rty := reflect.TypeOf(v) 10 if rty.Kind() != reflect.Struct { 11 return nil, false 12 } 13 rv := reflect.ValueOf(v) 14 for i := 0; i < rty.NumField(); i++ { 15 f := rty.Field(i) 16 if f.Name == field { 17 return rv.Field(i).Interface(), true 18 } 19 if jsonTag := f.Tag.Get("json"); jsonTag != "" { 20 jsonName, _, _ := strings.Cut(jsonTag, ",") 21 jsonName = strings.TrimSpace(jsonName) 22 if jsonName == field { 23 return rv.Field(i).Interface(), true 24 } 25 } 26 } 27 return nil, false 28 } 29 30 func baseKind(v any) reflect.Kind { 31 switch reflect.TypeOf(v).Kind() { 32 case reflect.Bool: 33 return reflect.Bool 34 case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, 35 reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: 36 return reflect.Int 37 case reflect.Float32, reflect.Float64: 38 return reflect.Float64 39 default: 40 return reflect.String 41 } 42 }