使用全局数据库连接时,若在 init 中进行连接初始化,需要注意 init 中不能重新声明局部变量 db。若在 init 中使用如下声明并赋值形式,则该连接仅赋值到局部变量 db 中,全局变量仍为 nil。
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
赋值全局变量的正确写法:
var db *gorm.DB
func init() {
//创建一个数据库的连接
var err error
dsn := "root:password@tcp(127.0.0.1:3306)/table_name?charset=utf8mb4&parseTime=True&loc=Local"
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
SingularTable: true, // 设置实体映射到不加 s 的表名
},
})
if err != nil {
panic("failed to connect database")
}
db.AutoMigrate(&todoModel{})
}