1 回答
TA贡献1828条经验 获得超3个赞
您至少应该检查错误。
如“连接到数据库”中所述:
请注意,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.DB
func init() {
db, err = sql.Open(DBparms....)
}
init()总是被调用,不管有没有 main,所以如果你导入一个有 init 函数的包,它就会被执行。每个包
可以有多个init()函数,它们将按照它们在代码中显示的顺序执行(当然在所有变量都初始化之后)。
- 1 回答
- 0 关注
- 158 浏览
添加回答
举报