Aprire una connessione db ogni volta che serve è uno spreco di risorse ed è lento.
Invece, dovresti creare un sql.DB
una volta, all'avvio dell'applicazione (o alla prima richiesta), e passarla dove è necessario (ad esempio come parametro di funzione o tramite un contesto), o semplicemente trasformarla in una variabile globale in modo che tutti possano accedervi. È sicuro chiamare da più goroutine.
Citando dal documento di sql.Open()
:
Il DB restituito è sicuro per l'uso simultaneo da parte di più goroutine e mantiene il proprio pool di connessioni inattive. Pertanto, la funzione Apri dovrebbe essere chiamata solo una volta. Raramente è necessario chiudere un DB.
Puoi usare un pacchetto init()
funzione per inizializzarlo:
var db *sql.DB
func init() {
var err error
db, err = sql.Open("yourdriver", "yourDs")
if err != nil {
log.Fatal("Invalid DB config:", err)
}
}
Una cosa da notare qui è che sql.Open()
potrebbe non creare una connessione effettiva al tuo DB, potrebbe semplicemente convalidare i suoi argomenti. Per verificare se puoi effettivamente connetterti al db, usa DB.Ping()
, ad esempio:
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)
}
}