Trabalho com bancos de dados em Go: PostgreSQL e MongoDB

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

Introdução: Por que Go e bancos de dados são a combinação perfeita

Go (Golang) é uma linguagem compilada, estaticamente tipada, criada para alta performance e simplicidade de desenvolvimento. Uma das principais vantagens do Go é sua rica biblioteca padrão e ecossistema de drivers para trabalhar com bancos de dados. Neste artigo, vamos abordar como conectar e executar operações com dois dos sistemas de gerenciamento de banco de dados (SGBD) mais populares: o relacional PostgreSQL e o orientado a documentos MongoDB.

Vamos cobrir a instalação de drivers, a escrita de operações CRUD (Create, Read, Update, Delete) e as melhores práticas para cada tipo de banco de dados no contexto de aplicações Go.



1. Trabalhando com PostgreSQL em Go

PostgreSQL é um poderoso SGBD objeto-relacional de código aberto. Para trabalhar com ele em Go, existem vários drivers, mas os mais populares são lib/pq e pgx. pgx é mais moderno e performático, portanto, vamos utilizá-lo.



1.1. Instalação do driver

Instale o pacote pgx via go get:

go get github.com/jackc/pgx/v5


1.2. Conexão com o banco de dados

Vamos criar um arquivo main.go e estabelecer uma conexão com o PostgreSQL. Observe o uso do contexto (context.Background()) — este é um padrão comum em Go para gerenciar o tempo de vida das requisições.

package main

import ( "context" "fmt" "log"

"github.com/jackc/pgx/v5/pgxpool")

func main() { // String de conexão: postgres://username:password@host:port/dbname connString := "postgres://user:password@localhost:5432/mydb" // Cria um pool de conexões (recomendado para produção) pool, err := pgxpool.New(context.Background(), connString) if err != nil { log.Fatal("Falha ao criar pool de conexões:", err) } defer pool.Close() // Verifica a conexão err = pool.Ping(context.Background()) if err != nil { log.Fatal("Falha ao conectar ao banco de dados:", err) } fmt.Println("Conectado ao PostgreSQL com sucesso!")}


1.3. Executando consultas SQL (CRUD)

Vamos considerar as operações básicas usando a tabela users como exemplo.



Criação da tabela (CREATE)

// Executando uma consulta DDL_, err = pool.Exec(context.Background(), `    CREATE TABLE IF NOT EXISTS users (        id SERIAL PRIMARY KEY,        name VARCHAR(100) NOT NULL,        email VARCHAR(100) UNIQUE NOT NULL,        age INT    )`)if err != nil {    log.Fatal("Erro ao criar tabela:", err)}


Inserção de dados (INSERT)

// Inserção com retorno do IDvar userID interr = pool.QueryRow(context.Background(),    "INSERT INTO users (name, email, age) VALUES ($1, $2, $3) RETURNING id",    "Alexey", "alex@example.com", 30).Scan(&userID)if err != nil {    log.Fatal("Erro na inserção:", err)}fmt.Printf("Usuário adicionado com ID: %d", userID)


Leitura de dados (SELECT)

// Obtendo um único usuáriotype User struct {    ID    int    Name  string    Email string    Age   int}

var user Usererr = pool.QueryRow(context.Background(), "SELECT id, name, email, age FROM users WHERE id = $1", 1). Scan(&user.ID, &user.Name, &user.Email, &user.Age)if err != nil { log.Fatal("Usuário não encontrado:", err)}fmt.Printf("Encontrado: %+v", user)


Atualização e exclusão (UPDATE/DELETE)

// Atualização_, err = pool.Exec(context.Background(),    "UPDATE users SET age = $1 WHERE id = $2", 31, 1)

// Exclusão_, err = pool.Exec(context.Background(), "DELETE FROM users WHERE id = $1", 1)


2. Trabalhando com MongoDB em Go

MongoDB é o principal banco de dados NoSQL, armazenamento

Blogs

Book Recommendations