Simplify set field value

This commit is contained in:
Jinzhu 2014-07-22 13:32:22 +08:00
parent 40c16f3c29
commit b78645279c
1 changed files with 10 additions and 17 deletions

View File

@ -8,7 +8,6 @@ import (
"reflect"
"regexp"
"runtime"
"strconv"
"strings"
"sync"
)
@ -123,25 +122,19 @@ func fileWithLineNum() string {
return ""
}
func setFieldValue(field reflect.Value, value interface{}) bool {
func setFieldValue(field reflect.Value, value interface{}) (result bool) {
result = false
if field.IsValid() && field.CanAddr() {
switch field.Kind() {
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
if str, ok := value.(string); ok {
value, _ = strconv.Atoi(str)
}
field.SetInt(reflect.ValueOf(value).Int())
default:
if scanner, ok := field.Addr().Interface().(sql.Scanner); ok {
scanner.Scan(value)
} else {
field.Set(reflect.ValueOf(value))
}
result = true
if scanner, ok := field.Addr().Interface().(sql.Scanner); ok {
scanner.Scan(value)
} else if reflect.TypeOf(value).ConvertibleTo(field.Type()) {
field.Set(reflect.ValueOf(value).Convert(field.Type()))
} else {
result = false
}
return true
}
return false
return
}
func isBlank(value reflect.Value) bool {