将 CSV 解组为结构,然后导入

我正在努力学习Go。我正在努力将 CSV 记录解组到结构中,以便我可以创建插入并将这些数据导入到我的数据库中。


我正在寻找一种自动化编组的方法,其方式与编码类似


当我运行 main 时,我收到一个错误


panic: strconv.ParseInt: parsing "id": invalid syntax

我写了一些代码,应该将我的 .csv 记录解组为结构体


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().String() {

        case "string":

            f.SetString(record[i])

        case "int":

            ival, err := strconv.ParseInt(record[i], 10, 0)

            if err != nil {

                return err

            }

            f.SetInt(ival)

        default:

            return &UnsupportedType{f.Type().String()}

        }

    }

    return nil

}

我在另一个文件中创建了这个结构:


type InsertToDatabase struct {

    ID         int `csv:"id"`

    groupId    int `csv:"group_id"`

    Name    string `csv:"name"`

    Status int `csv:"status"`

}

当 main 运行时,它应该运行这段代码,然后解析我的 .csv 文件以创建插入,然后在我的本地数据库上运行。


var InsertTest InsertToDatabase

    reader := csv.NewReader(file)

    for {

        err := Unmarshal(reader, &InsertTest)

        if err == io.EOF {

            break

        }

        if err != nil {

            panic(err)

        }

        channel <- InsertTest

    }

}

有没有办法提高这段代码的可读性?另外,我应该循环并调用.Read一次处理一行吗?


MMMHUHU
浏览 81回答 1
1回答

一只名叫tom的猫

当我运行 main 时,我收到一个错误恐慌:strconv.ParseInt:解析“id”:语法无效我猜你是无意中解析了 CSV 文件的标题行。
打开App,查看更多内容
随时随地看视频慕课网APP