从CSV文件创建插入内容时,如何跳过CSV文件中的第一行?

时间:2019-11-14 20:52:24

标签: go

我已经创建了一些代码,这些代码应该循环遍历一个csv文件,然后从该文件创建插入,以插入到数据库中。 该代码有效,但是它试图插入csv文件的第一行。第一行恰好是标题行。例如:

ID, Name
1,'John'

我不希望代码读取第一行并尝试插入ID和Name,而是插入1和'John'。

如何跳过.csv文件的第一行以相应地插入我的实际数据?

这是我目前正在从事的工作:

type InsertTestThing struct {
    ID int `csv:"id"`
    Name string `csv:"name"`
}

func InsertTestFileLoader(filename string, channel chan InsertTestThing) {
    defer close(channel)
    file, err := os.Open(filename)
    if err != nil {
        panic(err)
    }
    defer file.Close()
    var InsertTestNew InsertTestThing
    reader := csv.NewReader(file)
    for {
        err := unmarshal.Unmarshal(reader, &InsertTestNew)
        if err == io.EOF {
            break
        }
        if err != nil {
            panic(err)
        }
        channel <- InsertTestNew
    }
}

func saveInsertTest(channel <-chan InsertTestThing, db *sql.DB) {
    stmt, err := db.Prepare(`INSERT INTO InsertTest (id, name) VALUES (?, ?);`)
    if err != nil {
        log.Fatal(err)
    }

    for InsertTestThing := range channel {
        _, err := stmt.Exec(
            InsertTestThing.DiscountID,
            InsertTestThing.CategoryGroupId,
        )
        if err != nil {
            log.Fatal(err)
        }

    }
}

func InsertTestInsert()  {
    db, _ := sql.Open(
        "mysql", "localhost")
    channel := make(chan InsertTestThing)
    go InsertTestFileLoader("InsertTest.csv", channel)
    saveInsertTest(channel, db)
    defer db.Close()

0 个答案:

没有答案