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

ylqjgm · 2015-05-24 03:02:46 · 3631 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2015-05-24 03:02:46 的主题,其中的信息可能已经有所发展或是发生改变。

初学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


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3631 次点击  
加入收藏 微博
8 回复  |  直到 2018-10-22 14:17:13
blov
blov · #1 · 10年之前

具体报错的代码是哪一行?

ylqjgm
ylqjgm · #2 · 10年之前
blovblov #1 回复

具体报错的代码是哪一行?

rows, err := db.Query("SELECT id FROM user WHERE username='"+str+"';") 这一行

blov
blov · #3 · 10年之前

从错误看,是 db == nil,你在这个语句前打印 db 看看是否为 nil;另外,你确定 put 这个函数是在 sql.Open 之后调用?因为给出的代码不全,所以问一句

ylqjgm
ylqjgm · #4 · 10年之前
blovblov #3 回复

从错误看,是 db == nil,你在这个语句前打印 db 看看是否为 nil;另外,你确定 put 这个函数是在 sql.Open 之后调用?因为给出的代码不全,所以问一句

恩,的确是db==nil 但很奇怪啊,put函数的确是在sql.Open之后调用的,而且,我一开始是直接把sql.Open写到Init中的,但依然不行

blov
blov · #5 · 10年之前

考虑从 sql.Open 之后,跟踪 db 的值试试?

ylqjgm
ylqjgm · #6 · 10年之前
blovblov #5 回复

考虑从 sql.Open 之后,跟踪 db 的值试试?

哦,好的,我试试

gy0624ww
gy0624ww · #7 · 7年之前

你这里db.Close()不应该关闭。 你在调取完就关闭了。所以db为Nil

lihui7800
lihui7800 · #8 · 6年之前

main里面关闭了连接,所以在协程里面的连接是空引用。但是如果希望协程中可以使用此连接,需要channel来发送信号。在进行close。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传