Error in Golang-goroutines when using mysql insert and select

0
    package main

    import (
        "database/sql"
        "fmt"
        "log"
        "sync"
        "time"

        _ "github.com/go-sql-driver/mysql"
    )

    func main() {
        db, err := sql.Open("mysql", "SECRET")
        if err != nil {
            log.Println(err)
        }
        _, uerr := db.Exec("USE " + "try")
        if uerr != nil {
            log.Println(uerr)
        }
        defer db.Close()


        w := new(sync.WaitGroup)
        w.Add(100)

        syn := func(text string, w *sync.WaitGroup) {
            defer w.Done()
            db.Exec("INSERT INTO test VALUES(?)", text)
            fmt.Println(text)
        }

        for i := 0; i < 100; i++ {
            msg := fmt.Sprintf("Content %d", i)
            go syn(msg, w)

        }
        w.Wait()

        var (
            cn string
        )
        rows, er := db.Query("SELECT * FROM test")
        if er != nil {
            log.Println(er)
        }

        for rows.Next() {
            err := rows.Scan(&cn)
            if err != nil {
                log.Println(err)
            }
            fmt.Println("-----", cn)
        }
    }

When i run this code, syn funtion works well for 100 times. But after the loop, i got an error like below.

Error 1046: No database selected panic: runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x0 addr=0x0 pc=0x4dc067]

It is my objective to insert into mysql database using goroutines. Why do the error happen? and How can i do??

mysql
go
goroutine

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0