我应该多久在我的程序中调用 sql.Open?

正如标题所说,我不知道有多条sql.Open语句是好事还是坏事,或者我是否应该有一个只有 init 的文件,例如:


var db *sql.DB



func init() {

    var err error

    db, err = sql.Open

}

只是想知道最佳实践是什么。谢谢!


白板的微信
浏览 159回答 1
1回答

倚天杖

您至少应该检查错误。如“连接到数据库”中所述:请注意,Open不会直接打开数据库连接:这会推迟到进行查询时。要在进行查询之前验证是否可以建立连接,请使用以下Ping函数:if err := db.Ping(); err != nil {  log.Fatal(err)}使用后,使用 Close 关闭数据库。如果可能,将打开的数据库连接数限制为最少。参见“ Go/Golang sql.DB 在函数中的重用”:您不需要到处打开数据库连接。该database/sql包在内部进行连接池,根据需要打开和关闭连接,同时提供可以同时使用的单个连接的错觉。正如elithrar在评论中指出的那样,database.sql/#Open确实提到:返回的数据库对于多个 goroutine 并发使用是安全的,并维护自己的空闲连接池。因此,该Open函数应该只调用一次。很少需要关闭数据库。正如这里提到的*sql.DB全局声明还有一些额外的好处,例如SetMaxIdleConns(调节连接池大小)或准备跨应用程序的 SQL 语句。你可以使用一个函数init,即使你没有它也会运行main():var db *sql.DBfunc init() {    db, err = sql.Open(DBparms....)}init()总是被调用,不管有没有 main,所以如果你导入一个有 init 函数的包,它就会被执行。每个包可以有多个init()函数,它们将按照它们在代码中显示的顺序执行(当然在所有变量都初始化之后)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go