为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MMMHUHU 2023-07-31 16:13:48
我正在努力学习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条经验 获得超2个赞

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

恐慌:strconv.ParseInt:解析“id”:语法无效

我猜你是无意中解析了 CSV 文件的标题行。


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信