【发布时间】:2015-06-21 06:38:50
【问题描述】:
我正在编写一个使用 PostgreSQL 的简单 Go Web 应用程序。我的main 函数看起来像
var db *sql.DB
func main() {
var err error
db, err = sql.Open("postgres", "...")
if err != nil {
log.Fatalf("Couldn't connect to the database: %v", err)
}
http.HandleFunc("/whatever", whateverHandler)
http.ListenAndServe("127.0.0.1:8080", nil)
}
似乎我应该在某个时候在数据库连接上调用Close(),但是什么时候?这个应用程序永远服务(即直到我用^C 杀死它)。如果我在ListenAndServe 调用之后添加代码,它不会运行,因为我的^C 已经杀死了整个应用程序。我的应用程序应该采用不同的结构吗?
【问题讨论】:
-
正如 Elwinar 所说,在这种情况下,这并不重要,但通常您将
defer foo.Close()放在您打开的任何资源之后。否则,您可能会忘记稍后致电Close。
标签: go