PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie handhabe ich das Öffnen/Schließen der Db-Verbindung in einer Go-App?

Das Öffnen einer DB-Verbindung jedes Mal, wenn sie benötigt wird, ist Ressourcenverschwendung und langsam.

Stattdessen sollten Sie eine sql.DB erstellen einmal, wenn Ihre Anwendung startet (oder bei der ersten Anforderung), und übergeben Sie es entweder dort, wo es benötigt wird (z. B. als Funktionsparameter oder über einen Kontext), oder machen Sie es einfach zu einer globalen Variablen, damit jeder darauf zugreifen kann. Es ist sicher, von mehreren Goroutinen aus aufzurufen.

Zitieren aus dem Dokument von sql.Open() :

Die zurückgegebene DB ist für die gleichzeitige Verwendung durch mehrere Goroutinen sicher und behält ihren eigenen Pool von Leerlaufverbindungen bei. Daher sollte die Open-Funktion nur einmal aufgerufen werden. Es ist selten notwendig, eine DB zu schließen.

Sie können ein Paket init() verwenden Funktion zum Initialisieren:

var db *sql.DB

func init() {
    var err error
    db, err = sql.Open("yourdriver", "yourDs")
    if err != nil {
        log.Fatal("Invalid DB config:", err)
    }
}

Eine Sache, die hier zu beachten ist, ist, dass sql.Open() erstellt möglicherweise keine tatsächliche Verbindung zu Ihrer DB, sondern validiert möglicherweise nur ihre Argumente. Um zu testen, ob Sie sich tatsächlich mit der Datenbank verbinden können, verwenden Sie DB.Ping() , z. B.:

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