Отварянето на db връзка всеки път, когато е необходимо, е загуба на ресурси и е бавно.
Вместо това трябва да създадете sql.DB
веднъж, когато вашето приложение стартира (или при първо поискване), или го предайте, където е необходимо (например като параметър на функция или чрез някакъв контекст), или просто го направете глобална променлива и така всеки може да има достъп до нея. Безопасно е да се обаждате от множество горпрограми.
Цитат от документа на sql.Open()
:
Върнатият DB е безопасен за едновременна употреба от множество горутини и поддържа собствен пул от неактивни връзки. По този начин функцията Open трябва да бъде извикана само веднъж. Рядко се налага затваряне на БД.
Можете да използвате пакет init()
функция, за да го инициализирате:
var db *sql.DB
func init() {
var err error
db, err = sql.Open("yourdriver", "yourDs")
if err != nil {
log.Fatal("Invalid DB config:", err)
}
}
Едно нещо, което трябва да се отбележи тук е, че sql.Open()
може да не създаде действителна връзка с вашата DB, може просто да потвърди аргументите си. За да проверите дали наистина можете да се свържете с db, използвайте DB.Ping()
, напр.:
func init() {
var err error
db, err = sql.Open("yourdriver", "yourDs")
if err != nil {
log.Fatal("Invalid DB config:", err)
}
if err = db.Ping(); err != nil {
log.Fatal("DB unreachable:", err)
}
}