Go — Persistência
TL;DR
Galho 11 da trilha Go — como programas Go conversam com bancos de dados. 8 notas em 3 fases: o contrato
database/sql(Iniciado); pool de conexões, o padrão manual de Query/Scan, e os três caminhos mais usados em produção — pgx, sqlc e GORM (Adepto); migrations e o padrão repository sobre transações (Magus). Ao fim, você escolhe entre driver puro, codegen ou ORM com critério, e sabe orquestrar transações sem vazar*sql.DBpelo código.
Go não tem ORM embutido na stdlib — tem um contrato mínimo, database/sql, sobre o qual o ecossistema construiu camadas de conveniência com trade-offs bem diferentes entre si. Ver roadmap pro estado das notas.
Notas por fase
Iniciado — o contrato
- 01 - database-sql — o contrato —
sql.DBnão é uma conexão, é um pool;sql.Opené preguiçoso; a interfacedriver.Driver
Adepto — os caminhos de acesso
- 02 - Connection pool —
MaxOpenConns,MaxIdleConns,ConnMaxLifetime, exaustão de pool em produção - 03 - Query, Scan e o mapeamento manual —
QueryvsQueryRowvsExec,Scanlinha a linha,rows.Close(), SQL injection e placeholders - 04 - pgx — o driver Postgres avançado — por que pgx além de
lib/pq, pool nativo, tipos Postgres nativos,pgxpool - 05 - sqlc — SQL type-safe por codegen — SQL como fonte da verdade, geração de código Go tipado, trade-off vs ORM
- 06 - GORM — o ORM — modelos, migrations automáticas, associations, o preço da mágica (N+1, lazy loading)
Magus — orquestração e evolução do schema
- 07 - Migrations — golang-migrate, versionamento de schema, up/down, migrations em CI/CD
- 08 - Transações e o padrão repository —
Begin/Commit/Rollback, propagação de transação, interface repository desacoplada do driver