Conecte-se a um banco de dados Postgres em seu aplicativo Go com GORM
O Postgres é um dos bancos de dados SQL populares devido aos seus muitos recursos e facilidade de uso. O Postgres é compatível com ACID com recursos como controle de simultaneidade de várias versões, replicação assíncrona, transações aninhadas e log write-ahead. Juntamente com muitos outros, esses recursos tornam o Postgres o sistema de gerenciamento de banco de dados SQL ideal.
O ecossistema Go é o lar de muitos pacotes para interagir com vários DBMS, incluindo Postgres. Go fornece o pacote database/sql integrado para trabalhar com bancos de dados SQL usando drivers de banco de dados. Usando estruturas de dados Go, você pode integrar ORMs populares de terceiros, como GORM, para facilitar a interação com seu banco de dados.
Introdução ao GORM e ao Postgres
O pacote GORM é um dos ORMs mais populares no ecossistema Go porque é amigável ao desenvolvedor, rico em recursos e baseado no pacote database/sql .
O GORM fornece funcionalidade para migrações automáticas, log, instruções preparadas, transações e fragmentação. O pacote adota a abordagem code-first usando structs e outros tipos de dados integrados.
Execute este comando de terminal em seu diretório de trabalho para adicionar o pacote GORM às dependências de seu projeto:
go get gorm.io/gorm\n
Você precisará de um driver de banco de dados para trabalhar com o pacote GORM. GORM fornece drivers de banco de dados para DBMS populares. Execute este comando em seu diretório de trabalho para instalar o driver GORM Postgres :
go get gorm.io/driver/postgres\n
Conectando Postgres com Go usando GORM
Importe esses pacotes em seu arquivo Go para trabalhar com o ORM e o driver de banco de dados. Você usará o pacote log para registrar erros em seu console e o pacote fmt para imprimir a saída.
import (\n "fmt"\n "gorm.io/driver/postgres"\n "gorm.io/gorm"\n "log"\n)\n
Você precisará de uma string de conexão para se conectar ao seu banco de dados Postgres no ambiente de execução. Você pode usar uma struct como modelo para os campos que compõem a string de conexão. O uso de uma struct facilita a alteração e o teste de diferentes valores, principalmente em casos de injeção de dependência.
Aqui está um exemplo de modelo struct para os campos que compõem a string de conexão:
type Config struct {\n Host string\n Port string\n Password string\n User string\n DBName string\n SSLMode string\n}\n
Abaixo está uma função típica para sua conexão de banco de dados. Ele retorna a instância da conexão e um erro dependendo do status da conexão.
func NewConnection() (*gorm.DB, error) {\n return db, nil\n}\n
Você pode instanciar o modelo de estrutura de conexão e preencher os campos com os valores em seu banco de dados Postgres.
configurations: = Config{\n Host: "database_Host",\n Port: "database_Port",\n Password: "database_Password",\n User: "database_User",\n DBName: "database_Name",\n SSLMode: "false",\n }\n dsn: = fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=%s", configurations.Host, configurations.Port, configurations.User, configurations.Password, configurations.DBName, configurations.SSLMode)\n
A variável dsn usa o método de formatação Sprintf e os verbos de formatação de string Go para concatenar os campos da estrutura Config e configurar a string de conexão do Postgres.
Você pode abrir uma conexão de banco de dados com GORM usando o método Open . O método Open recebe uma conexão aberta de um driver de banco de dados e uma lista de configurações opcionais do tipo Config do pacote GORM. Ele retorna uma instância de conexão e um erro opcional.
db, err: = gorm.Open(postgres.Open(dsn), &gorm.Config{})\n if err! = nil {\n return db, err\n }\n
Fazendo ping no banco de dados para verificar o status da conexão
Você pode executar ping em seu banco de dados para verificar o status de integridade/online com uma função que retorna um resultado booleano ou um erro se a conexão com o banco de dados for inválida.
func PingDb() (bool, error) {\n \n return true, nil\n}\n
Você precisará criar uma nova instância de conexão para executar ping no banco de dados. Aqui está um exemplo usando a função NewConnection para criar uma instância de conexão:
connectionInstance, err: = NewConnection()\n if err! = nil {\n log.Fatalf("The database connection failed %v", err.Error())\n }\n
Depois de obter uma instância de conexão, crie uma instância de banco de dados com o método DB da conexão.
dbConnection, err: = connectionInstance.DB()\n if err! = nil {\n return false, err\n } \n
Você pode executar ping no banco de dados com o método Ping da instância do banco de dados. O método Ping retorna quaisquer erros ou nulo se a conexão foi bem-sucedida.
\n err = dbConnection.Ping()\n if err! = nil {\n return false, err\n } else {\n \n fmt.Println("The connection was successful")\n }\n
Uma execução bem-sucedida deve resultar em uma saída semelhante a esta:
Você pode usar o pacote database/sql para trabalhar com banco de dados SQL em Go
O pacote database/sql é extensível e, como a maioria dos pacotes e drivers de banco de dados Go estendem o pacote, você pode usar o pacote em seus projetos em vez de optar por ORMs.
O GORM também fornece um construtor SQL para criar SQL bruto, o que é útil para operações sem suporte.
Deixe um comentário