sql >> Database >  >> RDS >> PostgreSQL

Hoe ga ik om met het openen/sluiten van een Db-verbinding in een Go-app?

Elke keer dat het nodig is een db-verbinding openen, is een verspilling van middelen en is traag.

In plaats daarvan zou u een sql.DB . moeten maken eenmaal, wanneer uw toepassing start (of op eerste verzoek), en geef het door waar het nodig is (bijvoorbeeld als een functieparameter of via een bepaalde context), of maak er gewoon een globale variabele van zodat iedereen er toegang toe heeft. Het is veilig om vanuit meerdere goroutines te bellen.

Citeren uit het document van sql.Open() :

De geretourneerde DB is veilig voor gelijktijdig gebruik door meerdere goroutines en onderhoudt zijn eigen pool van inactieve verbindingen. De functie Open hoeft dus maar één keer te worden aangeroepen. Het is zelden nodig om een ​​DB te sluiten.

Je mag een pakket init() . gebruiken functie om het te initialiseren:

var db *sql.DB

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

Een ding om op te merken is dat sql.Open() maakt mogelijk geen daadwerkelijke verbinding met uw DB, het kan alleen zijn argumenten valideren. Om te testen of u daadwerkelijk verbinding kunt maken met de database, gebruikt u DB.Ping() , bijv.:

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


  1. 5 manieren om een ​​SQL-script uit te voeren vanuit een bestand in SQLite

  2. Hoe de IF-instructie werkt in SQL Server

  3. Hoe u een gebruiker kunt maken met superuser-rechten in PostgreSQL

  4. Zoek in meerdere tabellen en geef ook de tabelnaam weer in de resulterende rijen