我正在编写一个使用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)
}
Run Code Online (Sandbox Code Playgroud)
好像我应该Close()
在某个时候调用数据库连接,但什么时候?这个应用程序永远服务(即直到我杀了它^C
).如果我在ListenAndServe
调用之后放入代码它就不会运行,因为我^C
已经杀死了整个应用程序.我的申请应该有不同的结构吗?
重要的是要了解sql.Open()
不会打开与数据库的连接... http://golang.org/pkg/database/sql/#Open
Open可以仅在不创建与数据库的连接的情况下验证其参数.要验证数据源名称是否有效,请调用Ping.
同样重要的是要了解驱动程序处理连接的维护.因此,您可能希望在应用的生命周期内保持开放状态.
返回的数据库对于多个goroutine并发使用是安全的,并且维护自己的空闲连接池.因此,Open函数应该只调用一次.很少需要关闭数据库.
归档时间: |
|
查看次数: |
2940 次 |
最近记录: |