在models/baseModel 定义了 一个BaseModel对象,在这个对象上定义了 获取数据库连接和 释放数据库连接的方法
type BaseModel struct {
dbConnect *gorm.DB
}
func (baseModel BaseModel) getDbConnect() *gorm.DB {
var err error
mysqlConfig := conf.GetMysqlConf("default")
fmt.Println(mysqlConfig["user"] + ":" + mysqlConfig["password"] + "@(" + mysqlConfig["host"] + ":" + mysqlConfig["port"] + ")/" + mysqlConfig["dbname"] + "?charset=utf8&parseTime=True&loc=Local")
baseModel.dbConnect, err = gorm.Open("mysql", mysqlConfig["user"]+":"+mysqlConfig["password"]+"@("+mysqlConfig["host"]+":"+mysqlConfig["port"]+")/"+mysqlConfig["dbname"]+"?charset=utf8&parseTime=True&loc=Local")
//defer baseModel.dbConnect.Close()
if err != nil {
// 打日志
log.Println("数据库连接错误----", err)
return nil
}
return baseModel.dbConnect
}
func (baseModel BaseModel) close() {
if baseModel.dbConnect != nil {
baseModel.dbConnect.Close()
}
}
在这里没有用defer 将 释放数据库连接的操作写在 获取数据库连接的方法中的原因是 defer操作的执行时机 是在 return 后,函数退出前。如果将释放数据库连接的操作写在获取数据库连接的方法中,将导致此连接还没用就会被释放。