BoltDB索引超出范围

时间:2019-12-02 13:22:25

标签: go bolt boltdb

在Go中,我被分配去接管一个不是我写的项目。我有需要更新其内容的站点列表。

在后端,我有一个函数“ buildmetadata.go”,我需要运行该函数来更新包含所有站点的BoltDB。

“ buildmetadata.go”读取一个包含站点的.csv文件,它应该更新BoltDB,并且应该在CMS中显示更新的列表。

我从一开始就收到错误“ Panic:运行时错误:索引超出范围”,但是我还没有对代码产生疑惑。

日志:

Panic: runtime error: index out of range

goroutine 1 [running]:
main.main.func2(0xc0002f0fc0, 0x4ef880, 0xc0002f0fc0)
    /appl/src/auction/workers/buildmetadb.go:127 +0x403
github.com/boltdb/bolt.(*DB).Update(0xc000072000, 0xc00003fda8, 0x0, 0x0)
    /appl/src/github.com/boltdb/bolt/db.go:598 +0x90
main.main()
    /appl/src/auction/workers/buildmetadb.go:120 +0x757
exit status 2

代码:

func main() {
    // Open the my.db data file in your current directory.
    // It will be created if it doesn't exist.
    db, err := bolt.Open("/appdata/metadata.db", 0600, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    csvfile, err := os.Open("./techdocdata.csv")

    if err != nil {
        fmt.Println("BIG Error:", err)
    }

    defer csvfile.Close()
    reader := csv.NewReader(csvfile)
    reader.Comma = ','
    reader.Read()

    //cbService.CouchbaseSet("BIVA::counter", 0)
    for {
        record, err := reader.Read()

        //cbService.CouchbaseSet("BIVA::counter", 0)
        if err == io.EOF {
            break
        } else if err != nil {
            fmt.Println(err)
        }

        db.Update(func(tx *bolt.Tx) error {
            root, err := tx.CreateBucketIfNotExists([]byte("make"))
            if err != nil {
                return fmt.Errorf("create bucket: %s", err)
            }

            if err != nil {
                return err
            }

            err = root.Put([]byte(record[0]), []byte(record[0]))

            if err != nil {
                return err
            }

            subroot, err := tx.CreateBucketIfNotExists([]byte("models"))
            if err != nil {
                return fmt.Errorf("create bucket: %s", err)
            }

            if err != nil {
                return err
            }

            bk, err := subroot.CreateBucketIfNotExists([]byte(record[0]))
            if err != nil {
                return fmt.Errorf("create bucket: %s", err)
            }

            err = bk.Put([]byte(record[1]), []byte(record[1]))

            if err != nil {
                return err
            }

            return nil
        })
    }

    csvfile2, err := os.Open("./hedindealers.csv")

    if err != nil {
        fmt.Println("BIG Error:", err)

    }

    defer csvfile2.Close()
    reader = csv.NewReader(csvfile2)
    reader.Comma = ','
    reader.Read()

    //cbService.CouchbaseSet("BIVA::counter", 0)
    for {
        record, err := reader.Read()

        log.Println(record)

        //cbService.CouchbaseSet("BIVA::counter", 0)
        if err == io.EOF {

            break
        } else if err != nil {

            fmt.Println(err)

        }

        db.Update(func(tx *bolt.Tx) error {

            root, err := tx.CreateBucketIfNotExists([]byte("dealers"))
            if err != nil {
                return fmt.Errorf("create bucket: %s", err)
            }

            err = root.Put([]byte(record[0]), []byte(record[1]+"::"+record[2]+"::"+record[3]+"::"+record[4]))

            if err != nil {
                return err
            }

            return nil
        })
    }

    //send file to sosfile
    fmt.Print("Done!")
}

CSV:

Site A i Mölndal, Mercedes-Benz - Personbilsförsäljning,Västra Götaland,Mölndal,Flöjelbergsgatan
    Site B i Borås - Personbilsförsäljning,Västergötland,Borås,Pickesjövägen 
    Site C i Göteborg, Hisings Kärra - Personbilsförsäljning,Västergötland,Göteborg,Orrekulla Industrigata 

在线错误:

err = root.Put([]byte(record[0]), []byte(record[1]+"::"+record[2]+"::"+record[3]+"::"+record[4]))

csv文件中对原始文件的任何更改都会引发此错误。

0 个答案:

没有答案