Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何解组数据库中的64条记录以创建插入_Go - Fatal编程技术网

Go 如何解组数据库中的64条记录以创建插入

Go 如何解组数据库中的64条记录以创建插入,go,Go,我正在处理的项目应该是读取一个文件,然后基于该文件生成插入。 现在,脚本可以正常工作(有点)。 我在为表创建结构时遇到了一个问题,特别是为float64字段创建结构时。 我编写的脚本说明了类型为string和int的字段。我能够插入到具有这些字段类型的表中,但是如果我的数据库中有一个字段是float,那么脚本不会插入任何数据。 下面是我的脚本当前如何设置以检查int和string的类型 func UnmarshalCsvRecord(readerTest *csv.Reader, v inter

我正在处理的项目应该是读取一个文件,然后基于该文件生成插入。 现在,脚本可以正常工作(有点)。 我在为表创建结构时遇到了一个问题,特别是为float64字段创建结构时。 我编写的脚本说明了类型为stringint的字段。我能够插入到具有这些字段类型的表中,但是如果我的数据库中有一个字段是float,那么脚本不会插入任何数据。 下面是我的脚本当前如何设置以检查int和string的类型

func UnmarshalCsvRecord(readerTest *csv.Reader, v interface{}) error {
    recordtest, err := readerTest.Read()
    if err != nil {
        return err
    }
    s := reflect.ValueOf(v).Elem()
    if s.NumField() != len(recordtest) {
        return &CheckField{s.NumField(), len(recordtest)}
    }
    for i := 0; i < s.NumField(); i++ {
        f := s.Field(i)
        switch f.Type().String() {
        case "string":
            f.SetString(recordtest[i])
        case "int":
            ival, err := strconv.ParseInt(recordtest[i], 10, 0)
            if err != nil {
                return err
            }
            f.SetInt(ival)
        default:
            return &UnsupportedCheck{f.Type().String()}
        }
    }
    return nil
}

type CheckField struct {
    expected, found int
}

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

type UnsupportedCheck struct {
    TypeCheck string
}

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

句柄浮动使用与整数相同的模式。替换为。替换为

额外修复:打开而不是字符串

func UnmarshalCsvRecord(readerTest *csv.Reader, v interface{}) error {
    recordtest, err := readerTest.Read()
    if err != nil {
        return err
    }
    s := reflect.ValueOf(v).Elem()
    if s.NumField() != len(recordtest) {
        return &CheckField{s.NumField(), len(recordtest)}
    }
    for i := 0; i < s.NumField(); i++ {
        f := s.Field(i)
        switch f.Type().Kind() {
        case reflect.String:
            f.SetString(recordtest[i])
        case reflect.Int:
            ival, err := strconv.ParseInt(recordtest[i], 10, f.Type().Bits())
            if err != nil {
                return err
            }
            f.SetInt(ival)
        case reflect.Float64:
            fval, err := strconv.ParseFloat(recordtest[i], f.Type().Bits())
            if err != nil {
                return err
            }
            f.SetFloat(fval)
        default:
            return &UnsupportedCheck{f.Type().String()}
        }
    }
    return nil
}

句柄浮动使用与整数相同的模式。替换为。替换为

额外修复:打开而不是字符串

func UnmarshalCsvRecord(readerTest *csv.Reader, v interface{}) error {
    recordtest, err := readerTest.Read()
    if err != nil {
        return err
    }
    s := reflect.ValueOf(v).Elem()
    if s.NumField() != len(recordtest) {
        return &CheckField{s.NumField(), len(recordtest)}
    }
    for i := 0; i < s.NumField(); i++ {
        f := s.Field(i)
        switch f.Type().Kind() {
        case reflect.String:
            f.SetString(recordtest[i])
        case reflect.Int:
            ival, err := strconv.ParseInt(recordtest[i], 10, f.Type().Bits())
            if err != nil {
                return err
            }
            f.SetInt(ival)
        case reflect.Float64:
            fval, err := strconv.ParseFloat(recordtest[i], f.Type().Bits())
            if err != nil {
                return err
            }
            f.SetFloat(fval)
        default:
            return &UnsupportedCheck{f.Type().String()}
        }
    }
    return nil
}

对实现的一个小建议:将切换条件更改为
f.Type().Kind()
,并在切换案例中使用常量。对实现的一个小建议:将切换条件更改为
f.Type().Kind()
,并在切换案例中使用常量。
switch f.Type().Kind() {
...
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
...
case reflect.Float64, reflect.Float32:
...
}