为了账号安全,请及时绑定邮箱和手机立即绑定

这种数据访问模式是线程安全的吗?

这种数据访问模式是线程安全的吗?

Go
ibeautiful 2023-05-15 15:13:36
我已经dao.go通过以下实现实现了文件:type DbClient struct {    db *gorm.DB }GetDBClient()初始化与数据库的连接并返回(*DbClient, error)func (db *DbClient) Close() {    db.db.Close() }不同的CRUD方法DbClient为main.go所有处理程序提供服务的文件像这样使用它:var dbClient *DbClientfunc main() {    db, err := GetDBClient()    if err != nil {        panic(err)    }    dbClient = db    defer dbClient.Close()    ...}main.go所以所有使用 global的处理程序dbClient。这种架构线程安全吗?它是否提供数据库操作的原子性?
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

这个设计应该不错。


sql.DB处理并发访问并实现池化。gorm继承了它的这些特性。


不过我会做一个改变。全局变量很难管理。您可以注入db到使用它的代码中。


// to be removed

// var dbClient *DbClient


func main() {

    db, err := GetDBClient()

    if err != nil {

        panic(err)

    }

    defer db.Close()


    CodeThatUsesDB(db)

    ...


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信