вернуть значение в цикле перед продолжением цикла: goroutines, mutex или channel? - PullRequest
0 голосов
/ 09 октября 2018

Моя структура базы данных содержит следующие поля: catalog.id, catalog.category_id, catalog.name и связанные с ними поля, category.name и category.id.

при импорте записей CSV, содержащих поля csv_category_name и csv_catalog_name с использованием golang, так как цикл начинается, я хочу проверить, существует ли csv_category_name в поле category.name и вернуть его значение для вставки в catalog.category_id, в противном случае создайте category.name и верните category.idсохраните значение в памяти, чтобы его можно было вставить в catalog.cateogory_id в остальной части цикла с аналогичным условием, прежде чем цикл продолжится

я считаю, что может быть более простой путь, но с моими ограниченными знаниями в golangЯ разработал код, и я полагаю, что с вашим предложением я могу обеспечить лучший результат

package main

import (
    "io"
    "log"
)

func main() {
    cname := models.Category{
        CategoryName: c.Name, // this to be picked from loop
    }
    bb, err := models.CategoryByID(db, 4)
    if err != nil {
        cname.Save(db)
        return cname
    }

    for {
        var c CatalogCSV

        //CheckorCreate when the loop starts and use the value in the rest of the loop

        if err := dec.Decode(&c); err == io.EOF {
            break
        } else if err != nil {
            log.Fatal(err)
        }

        a := models.Catalog{
            CatalogName:         c.Catalogname,
            CatalogCategoryName: c.Categoryname, // This is part of the initial CSV file
            CataloCategoryID:    b.ID,           // this is to be picked from CategoryByID
        }

        // save author to database
        err = a.Save(db)
        if err != nil {
            log.Fatal(err)
        }
    }
}
...