我使用以下实现实现了dao.go文件:
type 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。
这个体系结构线程安全吗?它是否提供数据库操作的原子性?
发布于 2018-12-12 03:33:37
这个设计应该是好的。
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)
...
} https://stackoverflow.com/questions/53734018
复制相似问题