Trabalho com bancos de dados em Go: PostgreSQL e MongoDB na prática

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com Bancos de Dados em Go: PostgreSQL e MongoDB



Go (Golang) é uma linguagem compilada moderna, ideal para criar serviços de backend de alta carga. Uma das tarefas principais de qualquer backend é trabalhar com bancos de dados. Neste artigo, vamos detalhar como conectar e executar operações CRUD com dois dos SGBDs mais populares: o relacional PostgreSQL e o orientado a documentos MongoDB. Você receberá exemplos de código prontos, best practices e dicas para otimização de consultas.



1. Preparação do Ambiente e Instalação dos Drivers



Antes de começar, certifique-se de ter o Go versão 1.19 ou superior instalado. Para trabalhar com bancos de dados, precisaremos de dois pacotes principais:



  • database/sql — pacote padrão do Go para trabalhar com bancos SQL (interface comum);
  • lib/pq — driver para PostgreSQL;
  • go.mongodb.org/mongo-driver — driver oficial do MongoDB.


Instalação dos drivers via go get:



go get github.com/lib/pqgo get go.mongodb.org/mongo-driver/mongo


Crie um novo módulo para seu projeto:



mkdir go-db-examplecd go-db-examplego mod init go-db-example


2. Trabalho com PostgreSQL em Go



PostgreSQL é um SGBD objeto-relacional poderoso. Em Go, o trabalho com ele é feito através da interface database/sql.



2.1 Conexão com o Banco



Vamos criar o arquivo main.go e escrever a conexão com um banco de dados Postgres local:



package main

import ( "database/sql" "fmt" "log"

_ "github.com/lib/pq")

func main() { // String de conexão: user password dbname sslmode connStr := "user=postgres password=mysecretpassword dbname=testdb sslmode=disable" db, err := sql.Open("postgres", connStr) if err != nil { log.Fatal("Erro de conexão:", err) } defer db.Close()

// Verificamos a conexão err = db.Ping() if err != nil { log.Fatal("Não foi possível conectar ao BD:", err) } fmt.Println("Conectado ao PostgreSQL com sucesso!")}


2.2 Criação de Tabela e Inserção de Dados



Após conectar, vamos criar a tabela users e inserir alguns registros:



// Criação da tabelacreateTable := `CREATE TABLE IF NOT EXISTS users (    id SERIAL PRIMARY KEY,    name VARCHAR(100) NOT NULL,    email VARCHAR(100) UNIQUE NOT NULL,    age INT);`

_, err = db.Exec(createTable)if err != nil { log.Fatal("Erro ao criar tabela:", err)}

// Inserção de dadosinsert := `INSERT INTO users (name, email, age) VALUES ($1, $2, $3)`_, err = db.Exec(insert, "Ana Petrova", "anna@example.com", 28)if err != nil { log.Fatal("Erro na inserção:", err)}fmt.Println("Dados adicionados")


2.3 Leitura de Dados (SELECT)



Usamos QueryRow para um único registro e Query para múltiplos:



// Obtendo um único registrovar id intvar name, email stringvar age sql.NullInt64

row := db.QueryRow("SELECT id, name, email, age FROM users WHERE email = $1", "anna@example.com")err = row.Scan(&id, &name, &email, &age)if err != nil { log.Fatal("Erro ao escanear:", err)}fmt.Printf("ID: %d, Nome: %s, Email: %s, Idade: %v", id, name, email, age)

// Obtendo todos os registrosrows, err := db.Query("SELECT id, name, email FROM users ORDER BY id")if err != nil { log.Fatal("Erro na consulta:", err)}defer rows.Close()

for rows.Next() { err := rows.Scan(&id, &name, &email) if err != nil { log.Fatal("Erro ao ler linha:", err) } fmt.Printf("User: %d | %s | %s", id, name, email)}


Importante: Sempre trate sql.NullInt64 para campos anuláveis, a fim de evitar pânico com valores NULL.



3. Trabalho com MongoDB

Blogs

Book Recommendations