12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package schema
- import (
- "gorm.io/gorm/schema"
- "reflect"
- "time"
- )
- func dataTypeOf(field *schema.Field) string {
- var dataType string
- reflectType := field.FieldType
- for reflectType.Kind() == reflect.Ptr {
- reflectType = reflectType.Elem()
- }
- dataValue := reflect.Indirect(reflect.New(reflectType))
- switch dataValue.Kind() {
- case reflect.Bool:
- dataType = "boolean"
- case reflect.Int8, reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint8, reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
- dataType = "integer"
- case reflect.Float32, reflect.Float64:
- dataType = "double"
- case reflect.Struct:
- if _, ok := dataValue.Interface().(time.Time); ok {
- dataType = "string"
- }
- default:
- dataType = "string"
- }
- return dataType
- }
- func dataFormatOf(field *schema.Field) string {
- var dataType string
- dataType = field.Tag.Get("format")
- if dataType != "" {
- return dataType
- }
- reflectType := field.FieldType
- for reflectType.Kind() == reflect.Ptr {
- reflectType = reflectType.Elem()
- }
- dataValue := reflect.Indirect(reflect.New(reflectType))
- switch dataValue.Kind() {
- case timeKind, timePtrKind:
- dataType = "datetime"
- case reflect.Bool:
- dataType = "boolean"
- case reflect.Int8, reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint8, reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
- dataType = "integer"
- case reflect.Float32, reflect.Float64:
- dataType = "decimal"
- case reflect.Struct:
- if _, ok := dataValue.Interface().(time.Time); ok {
- dataType = "datetime"
- }
- default:
- dataType = "string"
- }
- return dataType
- }
|