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

时间:2019-05-17 17:24:16

标签: go go-gorm

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

在以上每个功能中,我都会打开一个数据库连接,执行一个CRUD操作,然后在执行该操作后立即关闭该连接,您将在代码段中看到herehere下面,使用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所述?

1 个答案:

答案 0 :(得分:3)

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