我在Go应用程序中使用GORM ORM进行Postgres访问。 我在数据库存储库中有4个功能,即创建,更新,删除和读取。
在以上每个功能中,我都会打开一个数据库连接,执行一个CRUD操作,然后在执行该操作后立即关闭该连接,您将在代码段中看到here和here下面,使用GORM
func (e *Example) Create(m *model.Example) (*model.Example, error) {
// open a database session
dbSession, err := e.OpenDB() //gorm.Open("postgres", connStr)
if err != nil {
log.Log(err)
return nil, err
}
// close database connection after operation is completed
defer dbSession.Close()
// create item
db := dbSession.Create(m)
if db.Error != nil {
return nil, db.Error
}
return m, nil
}
是正确的做法还是应该在整个应用程序中共享一个数据库连接,并让ORM处理管理连接?如here所述?
答案 0 :(得分:3)
您应该尽可能地重用数据库连接。而且gorm具有内置的连接池,因此,您不需要管理数据库句柄。只需在所有goroutine中共享它,它们就可以安全地共享该句柄,并根据需要分配新的连接。