Unmarshal CSV, чтобы структурировать и затем импортировать - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь выучить го. Я работаю над демаршированием CSV-записей в структуры, чтобы я мог затем создать вставки и импортировать эти данные в свою БД.

Я ищу способ автоматизации маршалинга, аналогично кодированию

Когда я запускаю main, я получаю сообщение об ошибке

panic: strconv.ParseInt: parsing "id": invalid syntax

Я написал некоторый код, который должен демонтировать мои записи .csv в struct

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 Ответ

1 голос
/ 28 октября 2019

Когда я запускаю main, я получаю сообщение об ошибке

panic: strconv.ParseInt: синтаксический анализ "id": неверный синтаксис

Я думаю, вы анализируетестрока заголовка CSV-файла случайно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...