Database 这种数据访问模式是线程安全的吗?
我用以下实现实现了Database 这种数据访问模式是线程安全的吗?,database,go,global,go-gorm,Database,Go,Global,Go Gorm,我用以下实现实现了dao.go文件: 类型DbClient struct{ db*gorm.db } GetDBClient()初始化与数据库的连接并返回(*DbClient,error) func(db*DbClient)Close(){ db.db.Close() } DbClient的不同CRUD方法 服务于所有处理程序的main.go文件如下所示: var dbClient *DbClient func main() { db, err := GetDBClient()
dao.go
文件:
类型DbClient struct{ db*gorm.db }
初始化与数据库的连接并返回GetDBClient()
(*DbClient,error)
func(db*DbClient)Close(){ 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)
...
}