最近学习sqlite3,试着写点demo代码
部分代码如下所示:
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
)
var (
db *sql.DB
)
const (
dbDriverName = "sqlite3"
dbName = "/root/data.db3"
)
func init() {
db, err := sql.Open(dbDriverName, dbName)
}
func insertData(db *sql.DB) {
db.Prepare() <------ panic: runtime error: invalid memory address or nil pointer dereference
}
后来发现init里面的db虽然在外面定义了一个全局变量db,但是因为使用了 := 导致依然被当做局部变量处理。于是init函数结束后该db指向的内存便被释放了。