Otevření připojení db pokaždé, když je potřeba, je plýtváním prostředky a je to pomalé.
Místo toho byste měli vytvořit sql.DB
jednou, když se vaše aplikace spustí (nebo na první vyžádání), a buď ji předejte tam, kde je potřeba (např. jako parametr funkce nebo prostřednictvím nějakého kontextu), nebo z ní jednoduše udělejte globální proměnnou, aby k ní měl přístup každý. Je bezpečné volat z více goroutin.
Citace z dokumentu sql.Open()
:
Vrácená databáze je bezpečná pro souběžné použití více rutinními programy a udržuje svůj vlastní fond nečinných připojení. Funkce Open by tedy měla být volána pouze jednou. Jen zřídka je nutné zavřít DB.
Můžete použít balíček init()
funkce pro jeho inicializaci:
var db *sql.DB
func init() {
var err error
db, err = sql.Open("yourdriver", "yourDs")
if err != nil {
log.Fatal("Invalid DB config:", err)
}
}
Jedna věc, kterou je třeba poznamenat, je, že sql.Open()
nemusí vytvořit skutečné připojení k vaší DB, může jen ověřit její argumenty. Chcete-li otestovat, zda se skutečně můžete připojit k db, použijte DB.Ping()
, např.:
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)
}
}