还有的缺点吗?
这些缺点(如果有)是什么?
比方说,我们在名为数据库的项目内创建一个包,在该包内定义一个名为DB var DB *mgo.Database
的变量,然后在项目的主要功能中将其填充到我们的mongo数据库中:
func main() {
session, err := mgo.Dial("localhost")
if err != nil {
fmt.Println(err)
return
}
database.DB = session.DB("mydatabase")
// project code
defer session.Close()
}
然后,我们使用database.DB与我们的数据库进行交互。
请注意,使用database.DB会有很多goroutine(如果有所不同)
该问题不是基于观点的,请花更多时间阅读和理解
答案 0 :(得分:1)
使用全局初始化的数据库传递到需要的地方的过程已经建立并且合理。
但是,只是使用database.DB
的方式类似
_ = database.DB.C(foo).Find(q).One(&bar)
整个地方的都有一个明显的缺点:您只使用基础连接池中的一个连接,实际上确保了 all 请求被顺序处理。
因此,您宁愿执行以下操作:
s := database.DB.Session.Copy()
_ = database.DB.C(foo).With(s).Find(q).One(&bar)
defer s.Close()
对于“并行”请求(关于并行请求有一些警告,为简洁起见,我省略了它们。)