PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como lidar com a abertura/fechamento da conexão Db em um aplicativo Go?


Abrir uma conexão de banco de dados sempre que necessário é um desperdício de recursos e é lento.

Em vez disso, você deve criar um sql.DB uma vez, quando seu aplicativo for iniciado (ou na primeira demanda), e passá-lo onde for necessário (por exemplo, como um parâmetro de função ou por meio de algum contexto), ou simplesmente torná-lo uma variável global e para que todos possam acessá-lo. É seguro ligar de várias goroutines.

Citando do documento de sql.Open() :

O banco de dados retornado é seguro para uso simultâneo por várias goroutines e mantém seu próprio pool de conexões ociosas. Assim, a função Open deve ser chamada apenas uma vez. Raramente é necessário fechar um banco de dados.

Você pode usar um pacote init() função para inicializá-lo:
var db *sql.DB

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

Uma coisa a notar aqui é que sql.Open() pode não criar uma conexão real com seu banco de dados, pode apenas validar seus argumentos. Para testar se você pode realmente se conectar ao banco de dados, use DB.Ping() , por exemplo.:
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)
    }
}