sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan håndterer jeg åbning/lukning af Db-forbindelse i en Go-app?

At åbne en db-forbindelse, hver gang det er nødvendigt, er spild af ressourcer, og det er langsomt.

I stedet skal du oprette en sql.DB én gang, når din applikation starter (eller på første efterspørgsel), og enten videregive den, hvor den er nødvendig (f.eks. som en funktionsparameter eller via en kontekst), eller blot gøre den til en global variabel, så alle kan få adgang til den. Det er sikkert at ringe fra flere goroutiner.

Citerer fra dokumentet til sql.Open() :

Den returnerede DB er sikker til samtidig brug af flere goroutiner og vedligeholder sin egen pulje af ledige forbindelser. Derfor skal funktionen Åbn kun kaldes én gang. Det er sjældent nødvendigt at lukke en DB.

Du kan bruge en pakke init() funktion for at initialisere den:

var db *sql.DB

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

En ting at bemærke her er, at sql.Open() skaber muligvis ikke en egentlig forbindelse til din DB, den kan bare validere dens argumenter. For at teste, om du rent faktisk kan oprette forbindelse til db'en, skal du bruge DB.Ping() , f.eks.:

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. RoR:Kan ikke ændre_kolonne i postgres, fint i MySQL (MySQL til udvikling, Postgres på Heroku)

  2. Find poster, hvor join ikke findes

  3. Lagring af data i MySQL som JSON

  4. SAP Lumira og JDBC-ODBC Bridge