在做数据插入的时候

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内存问题报错