在做数据插入的时候
user := User{Name: UserData["name"], Mobile: UserData["mobile"]}
res := db.Create(&user)
代码运行之后提示
runtime error: invalid memory address or nil pointer dereference
原来是db变量在初始化作用域的问题
var db *gorm.DB
func InitDB(conf *config.Config) *gorm.DB {
dsn := conf.Database.User + ":" + conf.Database.Pwd + "@tcp(" + conf.Database.Host + ":" + conf.Database.Port + ")/" + conf.Database.Name + "?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) //虽然db申明了全局变量,由于函数内部使用短变量声明 :=,InitDB函数中实际上生成了一个函数内的局部变量db因此全局变量db并没有被赋值
if err != nil {
// db.Close()
log.Fatal(err)
}
return db
}
解决办法:
var db *gorm.DB
func InitDB(conf *config.Config) *gorm.DB {
var err error //申明err
dsn := conf.Database.User + ":" + conf.Database.Pwd + "@tcp(" + conf.Database.Host + ":" + conf.Database.Port + ")/" + conf.Database.Name + "?charset=utf8mb4&parseTime=True&loc=Local"
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}) //不使用 :
if err != nil {
// db.Close()
log.Fatal(err)
}
return db
}
参考文章gorm内存问题报错