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