登录
首页 >  Golang >  Go问答

这种数据访问方式是否具有线程安全性?

来源:stackoverflow

时间:2024-03-10 18:18:28 135浏览 收藏

golang学习网今天将给大家带来《这种数据访问方式是否具有线程安全性?》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我已经实现了 dao.go 文件,其实现如下:

  • type dbclient 结构 { db *gorm.db }
  • getdbclient() 初始化与数据库的连接并返回 (*dbclient, error)

  • func (db *dbclient) 关闭() { db.db.close() }

  • dbclient的不同crud方法

为所有处理程序提供服务的 main.go 文件如下使用它:

var dbClient *DbClient

func main() {
    db, err := GetDBClient()
    if err != nil {
        panic(err)
    }
    dbClient = db
    defer dbClient.Close()
    ...
}

因此 main.go 的所有处理程序都使用全局 dbclient

这种架构线程安全吗?它是否提供数据库操作的原子性?


解决方案


这个设计应该不错。

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)
    ...
}

理论要掌握,实操不能落!以上关于《这种数据访问方式是否具有线程安全性?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>