这是一个golang作用域的坑,
var sqlDb *sqlDB
func Test(){
sqlDb, err := sql.Open("mysql","root:root@tcp(127.0.0.1:3306)/databaseName")
}
这段代码看似没有任何问题,但是在使用sqlDb对数据库进行操作时却报错
2019/04/11 14:32:08 [Recovery] 2019/04/11 - 14:32:08 panic recovered:
runtime error: invalid memory address or nil pointer dereference
原因就是
当我们在使用 := 时 会创建一个新的sqlDb变量,新的sqlDb会把全局变量sqlDb覆盖掉
正确操作
var SqlDB *sql.DB
func init() {
var err error
SqlDB, err = sql.Open("mysql","root:root@tcp(127.0.0.1:3306)/databaseName")
}
有疑问加站长微信联系(非本文作者)
本文来自:简书
感谢作者:贝塔船长
查看原文:golang使用mysql runtime error: invalid memory address or nil pointer dereference