今天做消息队列持久化存储服务过程中,golang操作mysql 报错:
panic:聽runtime error:聽invalid memory address or nil pointer dereference聽[
经过反复查找,原来是变量定义问题 做个记录,以后再有问题可以做个参考,原始代码:
var聽Db聽*sql.DB func聽init()聽{ 聽聽聽聽Db,聽err聽:=聽sql.Open("mysql",聽"root:123456@/test") 聽聽聽聽if聽err聽!=聽nil聽{ 聽聽聽聽聽聽聽聽panic(err) 聽聽聽聽} } /** 聽*聽记录访问日志 聽*/ func聽(c聽Commonlog)聽saveViewlog()聽{ 聽聽聽聽SqlIn聽:=聽fmt.Sprintf("insert聽into聽q_orgviewlog聽(viewnum,聽orgid,聽statisticsdate)聽values聽(1,聽%d,聽%d)",聽c.Orgid,聽time.Now().Unix()) 聽聽聽聽_,聽err聽:=聽Db.Exec(SqlIn) 聽聽聽聽if聽err聽!=聽nil聽{ 聽聽聽聽聽聽聽聽fmt.Println("用户SQL错误,执行时间:",聽time.Now().String(),聽"错误内容:",聽err.Error(),聽"SQL:",聽sqlUpdate) 聽聽聽聽聽聽聽聽fmt.Println(err) 聽聽聽聽}聽else聽{ 聽聽聽聽聽聽聽聽fmt.Println("更新成功") 聽聽聽聽} }
然后就报了上面的错误
经过反复查询,Db变量定义的问题,:=只在当前方法内有效,于是修改如下:
var聽Db聽*sql.DB func聽init()聽{ 聽聽聽聽var聽err聽error 聽聽聽聽Db,聽err聽=聽sql.Open("mysql",聽"root:123456@/test") 聽聽聽聽if聽err聽!=聽nil聽{ 聽聽聽聽聽聽聽聽panic(err) 聽聽聽聽} } /** 聽*聽记录访问日志 聽*/ func聽(c聽Commonlog)聽saveViewlog()聽{ 聽聽聽聽SqlIn聽:=聽fmt.Sprintf("insert聽into聽q_orgviewlog聽(viewnum,聽orgid,聽statisticsdate)聽values聽(1,聽%d,聽%d)",聽c.Orgid,聽time.Now().Unix()) 聽聽聽聽_,聽err聽:=聽Db.Exec(SqlIn) 聽聽聽聽if聽err聽!=聽nil聽{ 聽聽聽聽聽聽聽聽fmt.Println("用户SQL错误,执行时间:",聽time.Now().String(),聽"错误内容:",聽err.Error(),聽"SQL:",聽sqlUpdate) 聽聽聽聽聽聽聽聽fmt.Println(err) 聽聽聽聽}聽else聽{ 聽聽聽聽聽聽聽聽fmt.Println("更新成功") 聽聽聽聽} }
执行成功
本文出自 “大胡学习笔记” 博客,请务必保留此出处http://zhixinhu.blog.51cto.com/3132199/1844734
有疑问加站长微信联系(非本文作者)
本文来自:51CTO博客
感谢作者:guhongzi
查看原文:golang panic: runtime error: invalid memory address or nil pointer dereference [