PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment gérer l'ouverture/fermeture de la connexion Db dans une application Go ?

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)
    }
}