campus-supervision/handler/base-handler.go

43 lines
1.5 KiB
Go
Raw Normal View History

2023-12-29 04:58:20 +00:00
package handler
import (
"errors"
"fmt"
"net/url"
"reflect"
)
// 解析结构体数据写入到map中
func inspectStruct(u interface{}) (url.Values, error) {
values := url.Values{}
typev := reflect.TypeOf(u)
if typev.Kind() != reflect.Struct {
return nil, errors.New("typev.Kind() is not a reflect.Struct")
}
v := reflect.ValueOf(u)
for i := 0; i < typev.NumField(); i++ {
field := v.FieldByName(typev.Field(i).Name)
// typev := reflect.TypeOf(u).FieldByName()
switch field.Kind() {
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
values.Add(typev.Field(i).Name, fmt.Sprintf("%d", field.Int()))
// fmt.Printf("field:%s type:%s value:%d\n", typev.Field(i).Name, field.Type().Name(), field.Int())
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
values.Add(typev.Field(i).Name, fmt.Sprintf("%d", field.Uint()))
// fmt.Printf("field:%s type:%s value:%d\n", typev.Field(i).Name, field.Type().Name(), field.Uint())
case reflect.Bool:
values.Add(typev.Field(i).Name, fmt.Sprintf("%v", field.Bool()))
// fmt.Printf("field:%s type:%s value:%t\n", typev.Field(i).Name, field.Type().Name(), field.Bool())
case reflect.String:
values.Add(typev.Field(i).Name, field.String())
// fmt.Printf("field:%s type:%s value:%q\n", typev.Field(i).Name, field.Type().Name(), field.String())
// default:
// fmt.Printf("field:%s unhandled kind:%s\n", typev.Field(i).Name, field.Kind())
}
}
return values, nil
}