Trabalho com bancos de dados em Go: PostgreSQL e MongoDB para iniciantes

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 ideal

\n

Go (Golang) é uma linguagem compilada moderna, criada pelo Google. Suas principais vantagens são alta performance, simplicidade e suporte nativo a concorrência. Quando se trata de trabalhar com bancos de dados, Go oferece bibliotecas padrão poderosas e drivers de terceiros populares para qualquer SGBD.

\n

Neste artigo, vamos abordar como conectar e realizar operações básicas com dois dos bancos de dados mais populares: o relacional PostgreSQL e o orientado a documentos MongoDB. O material é voltado para desenvolvedores iniciantes que já conhecem os fundamentos da sintaxe do Go.

\n\n

1. Preparação do ambiente e instalação dos drivers

\n

Antes de escrever código, certifique-se de ter o Go instalado (versão 1.21+). Para trabalhar com bancos de dados, precisaremos de drivers. Instale-os usando os comandos:

\n
go get github.com/lib/pq          // para PostgreSQL\ngo get go.mongodb.org/mongo-driver // para MongoDB
\n

Certifique-se também de que os servidores de banco de dados correspondentes estejam em execução na sua máquina (localmente ou via Docker).

\n\n

1.1. Estrutura do projeto

\n

Crie um arquivo main.go. Toda a lógica será concentrada nele para simplificar. Em projetos reais, é recomendável dividir o código em pacotes.

\n\n

2. Trabalhando com PostgreSQL em Go

\n

PostgreSQL é um SGBD relacional poderoso. Para trabalhar com ele em Go, usamos o pacote database/sql e o driver lib/pq.

\n\n

2.1. Conexão ao banco de dados

\n

Vamos criar uma função de conexão. A string de conexão (DSN) contém host, porta, nome de usuário e banco de dados.

\n
package main\n\nimport (\n    "database/sql"\n    "fmt"\n    "log"\n\n    _ "github.com/lib/pq"\n)\n\nfunc main() {\n    connStr := "host=localhost port=5432 user=postgres password=secret dbname=testdb sslmode=disable"\n    db, err := sql.Open("postgres", connStr)\n    if err != nil {\n        log.Fatal("Erro de conexão:", err)\n    }\n    defer db.Close()\n\n    // Verificando a conexão\n    err = db.Ping()\n    if err != nil {\n        log.Fatal("Não foi possível estabelecer conexão:", err)\n    }\n    fmt.Println("Conectado ao PostgreSQL com sucesso!")\n}
\n

Importante: sql.Open não cria uma conexão real, apenas um pool. A conexão real ocorre na primeira requisição ou chamada a Ping().

\n\n

2.2. Criação de tabela e inserção de dados

\n

Agora vamos criar a tabela users e adicionar alguns registros.

\n
// Criação da tabela\ncreateTable := `\nCREATE TABLE IF NOT EXISTS users (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(100) NOT NULL,\n    email VARCHAR(100) UNIQUE NOT NULL,\n    age INT\n);`\n_, err = db.Exec(createTable)\nif err != nil {\n    log.Fatal("Erro ao criar tabela:", err)\n}\n\n// Inserção de dados\ninsert := `INSERT INTO users (name, email, age) VALUES ($1, $2, $3)`\n_, err = db.Exec(insert, "Ivan Petrov", "ivan@example.com", 30)\nif err != nil {\n    log.Fatal("Erro ao inserir:", err)\n}\nfmt.Println("Dados adicionados")
\n

Observe o uso dos placeholders $1, $2 — isso protege contra injeção de SQL.

\n\n

2.3. Leitura e atualização de dados

\n

Vamos executar uma consulta de seleção e atualizar a idade do usuário.

\n
// Leitura de dados\nrows, err := db.Query("SELECT id, name, email, age FROM users")\nif err != nil {\n    log.Fatal(err)\n}\ndefer rows.Close()\n\nfor rows.Next() {\n    var id int\n    var name, email string\n    var age int\n    err := rows.Scan(&id, &name, &email, &age)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf("ID: %d, Nome: %s, Email: %s, Idade: %d\\n", id, name, email, age)\n}\n\n// Atualização\n_, err = db.Exec("UPDATE users SET age = $1 WHERE name = $2", 31, "Ivan Petrov")\nif err != nil {\n    log.Fatal(err)\n}\nfmt.Println("Idade atualizada")
\n\n

3. Trabalhando com MongoDB

Blogs

Book Recommendations