sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo manejo la apertura/cierre de la conexión Db en una aplicación Go?

Abrir una conexión de base de datos cada vez que se necesita es una pérdida de recursos y es lento.

En su lugar, debe crear un sql.DB una vez, cuando se inicie su aplicación (o en la primera demanda), y páselo donde sea necesario (por ejemplo, como un parámetro de función o a través de algún contexto), o simplemente conviértalo en una variable global para que todos puedan acceder a él. Es seguro llamar desde varias rutinas.

Citando del documento de sql.Open() :

La base de datos devuelta es segura para el uso simultáneo de varias rutinas y mantiene su propio grupo de conexiones inactivas. Por lo tanto, la función Abrir debe llamarse solo una vez. Rara vez es necesario cerrar una base de datos.

Puede usar un paquete init() función para inicializarlo:

var db *sql.DB

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

Una cosa a tener en cuenta aquí es que sql.Open() puede que no cree una conexión real a su base de datos, solo puede validar sus argumentos. Para probar si realmente puede conectarse a la base de datos, use DB.Ping() , por ejemplo:

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