我有一个连接到postgresql数据库的Web服务器.据我所知,postgresql驱动程序在内部管理连接池,因此我将数据库连接作为全局变量.
我正在使用预处理语句,我不知道main在服务器启动之前在我的函数中提前准备它们是否是一个好主意,或者在我的请求处理程序中执行它(如下所示).我是golang的新手.我认为使语句全局化更有效,但我不确定.请帮忙.
var db *sql.DB
func main() {
router = pat.New()
router.Get("/", handler)
db, e := sql.Open("postgres", "...")
...
http.ListenAndServe("127.0.0.1", router)
}
func handler(w http.ResponseWriter, r *http.Request) {
s, e := db.Prepare("select * from mytable where field=$1")
r, e := s.Exec(123)
...
}
Run Code Online (Sandbox Code Playgroud)
这一切都取决于您的用例.根据经验,我会说你应该在运行服务器之前准备好你的语句,原因有很多:
至于你的数据库句柄,你应该使语句全局化,以便随时使用它们而不必传递指针.如果您发现自己处理许多语句,例如超过10-15(任意数字),您可能会发现将所有与数据库相关的内容(数据库初始化,查询等)放入主包的子包中会更容易.