将CSV分解为Struct,然后导入



我正在努力学习围棋。我正在将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文件以创建插入,然后在我的本地DB上运行。

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来一次处理一行?

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

恐慌:strconv。ParseInt:正在分析"id":无效语法

我猜您无意中解析了CSV文件的头行。

最新更新