注意:我不确定这是否是这篇文章最准确的标题,如果不是,请建议更好的标题。
目前我正在创建一个服务器,其中有几个处理程序(使用goji)。收到请求后,我想与我拥有的 MongoDB 数据库进行交互(使用mgo)。我的问题是:
我假设每次处理请求时都做这种事情很昂贵:
uri := os.Getenv("MONGOHQ_URL")
if uri == "" {
panic("no DB connection string provided")
}
session, err := mgo.Dial(uri)
那么,拥有一个可以从处理程序内部访问的全局变量对我来说会更好吗?所以我会用这样的东西:
var session *mgo.Session
func main() {
session = setupDB()
defer session.Close()
goji.Get("/user", getUser)
goji.Serve()
}
func getUser(c web.C, w http.ResponseWriter, r *http.Request) {
// Use the session var here
}
我的问题与这里的最佳做法有关?每次请求进入时打开数据库,或在整个应用程序期间保持打开状态。