Ouvrir une connexion à la base de données à chaque fois que cela est nécessaire est un gaspillage de ressources et c'est lent.
Au lieu de cela, vous devez créer un sql.DB
une fois, lorsque votre application démarre (ou à la première demande), et passez-la là où elle est nécessaire (par exemple en tant que paramètre de fonction ou via un contexte), ou faites-en simplement une variable globale et que tout le monde puisse y accéder. Vous pouvez appeler en toute sécurité depuis plusieurs goroutines.
Citant la doc de sql.Open()
:
La base de données renvoyée est sûre pour une utilisation simultanée par plusieurs goroutines et maintient son propre pool de connexions inactives. Ainsi, la fonction Open ne doit être appelée qu'une seule fois. Il est rarement nécessaire de fermer une BD.
Vous pouvez utiliser un package init()
fonction pour l'initialiser :
var db *sql.DB
func init() {
var err error
db, err = sql.Open("yourdriver", "yourDs")
if err != nil {
log.Fatal("Invalid DB config:", err)
}
}
Une chose à noter ici est que sql.Open()
peut ne pas créer de connexion réelle à votre base de données, il peut simplement valider ses arguments. Pour tester si vous pouvez réellement vous connecter à la base de données, utilisez DB.Ping()
, par exemple :
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)
}
}