code: func fieldValue(fieldVal reflect.Value, structField reflect.StructField) (ret interface{}) {
  	if isBlank(fieldVal) {
  		defaultValue := strings.TrimSpace(parseTagSetting(structField.Tag.Get("sql"))["default"])
  		if defaultValue != "" {
  			switch fieldVal.Kind() {
  			case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  				if numericValue, err := strconv.ParseInt(defaultValue, 10, 64); err == nil {
  					if numericValue != fieldVal.Int() {
  						return fieldVal.Int()
  					}
  					return numericValue
  				}
  			case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
  				if numericValue, err := strconv.ParseUint(defaultValue, 10, 64); err == nil {
  					if numericValue != fieldVal.Uint() {
  						return fieldVal.Int()
  					}
  					return numericValue
  				}
  			case reflect.Float32, reflect.Float64:
  				if floatValue, err := strconv.ParseFloat(defaultValue, 64); err == nil {
  					if floatValue != fieldVal.Float() {
  						return fieldVal.Float()
  					}
  					return floatValue
  				}
  			case reflect.Bool:
  				if boolValue, err := strconv.ParseBool(defaultValue); err == nil {
  					if boolValue != fieldVal.Bool() {
  						return fieldVal.Bool()
  					}
  					return boolValue
  				}
  			case reflect.String:
  				return fieldVal.String()
  			default:
  				return nil
  			}
  		}
  		return nil
  	}
  	return fieldVal.Interface()
  }
docs: // fieldValue returns an interface{} that's the value of fieldVal if fieldVal is not blank
  // if fieldVal is blank and the field has a default value, return the defalt value
  // oherwise returns nil