mysql连接问题,goruntime里执行总是出错,程序一直崩溃

初学golang,尝试写一个程序,但是在mysql操作时遇到了问题~
看网上文章,推荐mysql直接创建一个db全局变量,然后连接一次,以后使用到直接用这个db,我按照这样的方法,然后进行操作,可是程序却一直崩溃,代码如下:

var db *sql.DB

func put(str string) bool {
    // 执行到这里就崩溃
    rows, err := db.Query("SELECT `id` FROM `user` WHERE `username`='"+str+"';")
    if err != nil{
        panic(err)
    }
    defer rows
}

func main(){
    var err error
    db, err = sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/dht?charset=utf8")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // 获取信息代码

    for{
        go func(str string) {
            ok := put(str)
            if !ok {
                fmt.Println("error")
            }
        }(str)

        time.Sleep(10 * time.Second)
    }
}

不知道是什么原因,一执行到查询,或者其他操作语句,程序就会崩溃,然后报错:panic: runtime error: invalid memory address or nil pointer dereference

共 9 个回复


dxhdxh2k

数据库操作不能放在goruntime中

# 0

ylqjgm

啊,但是我有这个需要,那要怎么才能解决呢?

# 1

ylqjgm

因为我是从一个文件中按行读取信息,每个文件几乎几十万条数据,不适用goruntime的话效率真的太差了

# 2

heimeil

put好像不是完整的吧?

# 3

ylqjgm

put的确不完整,不过应该与put内容无关吧,主要就是我已经打开了sql.Open了,但是调用put使用db还是不行

# 4

seefan

即使用协程,也尽量少用全局变量,可以传进去

# 5

16779242

看这代码,put函数是没写全?

# 6

yuankan20081

如果不是你自己panic的,那就是db没实现query方法

# 7

bigbear

str 这个变量的值在哪里?
倒数第二行.

# 8