我正在努力学习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一次处理一行吗?
1 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
当我运行 main 时,我收到一个错误
恐慌:strconv.ParseInt:解析“id”:语法无效
我猜你是无意中解析了 CSV 文件的标题行。
- 1 回答
- 0 关注
- 110 浏览
添加回答
举报
0/150
提交
取消