插入整数时处理空值

时间:2019-11-30 23:49:29

标签: go

我写了一些代码,旨在从.csv文件创建插入。 我在尝试插入值为NULL的字段时遇到问题。 在大多数情况下,我的.csv中的字段为int,但有时需要为NULL。我知道我不能将“ NULL”作为int传递,但是在创建插入时如何容纳这些NULL记录? / p>

在使用.csv Im的情况下,列CustomerID可以是int或可以为NULL。

sql.NullInt64这样的作品吗?

这是我正在处理的代码:

func Unmarshal(reader *csv.Reader, v interface{}) error {
    record, err := reader.Read()
    if err != nil {
        return err
    }
    s := reflect.ValueOf(v).Elem()
    if s.NumField() != len(record) {
        return &FieldMismatch{s.NumField(), len(record)}
    }
    for i := 0; i < s.NumField(); i++ {
        f := s.Field(i)
        switch f.Type().Kind() {
        case reflect.String:
            f.SetString(record[i])

        case reflect.Int:
            ival, err := strconv.ParseInt(record[i], 10, f.Type().Bits())
            if err != nil {
                return err
            }
            f.SetInt(ival)
        case reflect.Float64:
            fval, err := strconv.ParseFloat(record[i], f.Type().Bits())
            if err != nil {
                return err
            }
            f.SetFloat(fval)
        default:
            return &UnsupportedType{f.Type().String()}
        }
    }
    return nil
}

type FieldMismatch struct {
    expected, found int
}

func (e *FieldMismatch) Error() string {
    return "CSV line fields mismatch. Expected " + strconv.Itoa(e.expected) + " found " + strconv.Itoa(e.found)
}

type UnsupportedType struct {
    Type string
}

func (e *UnsupportedType) Error() string {
    return "Unsupported type: " + e.Type
}

0 个答案:

没有答案