我已经创建了一些代码,这些代码应该循环遍历一个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()