是否应该在每种CRUD方法中打开和关闭数据库连接?

yke*_*kel 3 go go-gorm

我在Go应用程序中使用GORM ORM进行Postgres访问。我在数据库存储库中有4个功能,即创建,更新,删除和读取。

在上述每个功能中,我都会使用GORM打开数据库连接,执行CRUD操作,然后在执行操作后立即关闭连接,正如您将在此处此处和下面的代码片段中看到的那样。

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
}
Run Code Online (Sandbox Code Playgroud)

这是正确的做法,还是应该在整个应用程序中共享一个数据库连接,并让ORM处理管理连接?如这里所述

Pra*_*war 5

您应该尽可能地重用数据库连接。而且gorm具有内置的连接池,因此,您不需要管理数据库句柄。只需在所有goroutine中共享它,它们便可以安全地共享该句柄,并根据需要分配新的连接。