初学golang,尝试写一个程序,但是在mysql操作时遇到了问题~
看网上文章,推荐mysql直接创建一个db全局变量,然后连接一次,以后使用到直接用这个db,我按照这样的方法,然后进行操作,可是程序却一直崩溃,代码如下:
```go
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
更多评论
rows, err := db.Query("SELECT `id` FROM `user` WHERE `username`='"+str+"';")
这一行
#2
从错误看,是 db == nil,你在这个语句前打印 db 看看是否为 nil;另外,你确定 put 这个函数是在 sql.Open 之后调用?因为给出的代码不全,所以问一句
#3