我已经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)
...
}
- 1 回答
- 0 关注
- 101 浏览
添加回答
举报
0/150
提交
取消