gpt4 book ai didi

postgresql - 什么时候在 golang web 服务器中准备 postgresql 语句?

转载 作者:IT王子 更新时间:2023-10-29 00:36:25 25 4
gpt4 key购买 nike

我有一个连接到 postgresql 数据库的网络服务器。据我了解,postgresql 驱动程序在内部管理一个连接池,因此我将数据库连接设置为全局变量。

我正在使用准备好的语句,我不知道在服务器启动之前在我的 main 函数中提前准备它们是个好主意,还是在我的请求处理程序中进行(如以下)。我是戈朗的新手。我认为将语句设为全局更有效,但我不确定。请帮忙。

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)
...
}

最佳答案

这完全取决于您的用例。根据经验,出于多种原因,我会说您应该在运行服务器之前准备好语句:

  • 如果语句未正确准备,您可能无法开始。如果您即时准备它们,则失败的语句可能会导致整个程序在启动后很长时间内失效。
  • 如果您事先准备好它们,则不必处理并发:如果在需要时准备,您必须使用同步机制来确保一条语句不会被并行准备多次,这将以您的 SQL 服务器结束在火焰中坠落……
  • 处理起来更简单。

至于您的数据库句柄,您应该将语句设为全局语句,以便随时取用它们,而不必四处传递指针。如果您发现自己处理许多语句,比如超过 10-15(任意数字),您可能会发现将所有与数据库相关的内容(数据库初始化、查询等)放入主包的子包中会更容易.

关于postgresql - 什么时候在 golang web 服务器中准备 postgresql 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24568040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com