GORM para Go: guia completo com exemplos

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

O que é GORM e para que serve?

\n\n

GORM é uma biblioteca ORM (Object-Relational Mapping) poderosa e popular para a linguagem Go. Ela fornece aos desenvolvedores uma maneira conveniente de interagir com bancos de dados relacionais (PostgreSQL, MySQL, SQLite, SQL Server e outros), usando uma abordagem orientada a objetos em Go.

\n\n

Para que serve o GORM?

\n
    \n
  • Automação de CRUD: O GORM assume a escrita de código SQL padrão para criar, ler, atualizar e excluir registros.
  • \n
  • Migrações de esquema: Permite criar e atualizar automaticamente tabelas no banco de dados com base em suas estruturas Go.
  • \n
  • Relacionamentos entre tabelas: Simplifica o trabalho com relacionamentos "um para muitos", "muitos para muitos" e "um para um".
  • \n
  • Segurança: Proteção integrada contra injeção de SQL por meio de consultas parametrizadas.
  • \n
  • Desempenho: Suporta carregamento preguiçoso (Lazy Loading), carregamento antecipado (Eager Loading) e cache.
  • \n
  • Comunidade: Comunidade enorme, muitos plugins e extensões.
  • \n
\n\n

Instalação do GORM

\n\n

O GORM é instalado da maneira padrão para pacotes Go. Certifique-se de ter o Go instalado (versão 1.18+).

\n\n
go get -u gorm.io/gorm\ngo get -u gorm.io/driver/sqlite  # Para SQLite\ngo get -u gorm.io/driver/mysql   # Para MySQL\ngo get -u gorm.io/driver/postgres # Para PostgreSQL\ngo get -u gorm.io/driver/sqlserver # Para SQL Server
\n\n

Nota: Ao contrário do Python (pip) ou Node.js (npm), o Go não possui um gerenciador de pacotes único. O comando go get baixa o código-fonte e o compila em seu projeto.

\n\n

Início rápido com exemplo de código

\n\n

Vamos criar um aplicativo simples para gerenciar usuários usando SQLite.

\n\n
package main\n\nimport (\n    "fmt"\n    "gorm.io/driver/sqlite"\n    "gorm.io/gorm"\n)\n\n// User — modelo de dados, correspondente à tabela no BD\ntype User struct {\n    ID    uint   `gorm:"primaryKey"`\n    Name  string `gorm:"size:100;not null"`\n    Email string `gorm:"uniqueIndex;size:255"`\n    Age   int\n}\n\nfunc main() {\n    // 1. Conexão ao banco de dados\n    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})\n    if err != nil {\n        panic("falha ao conectar ao banco de dados")\n    }\n\n    // 2. Automigração — criação da tabela\n    db.AutoMigrate(&User{})\n\n    // 3. Criação de registro (Create)\n    user := User{Name: "Ivan Petrov", Email: "ivan@example.com", Age: 30}\n    result := db.Create(&user)\n    if result.Error != nil {\n        fmt.Println("Erro ao criar:", result.Error)\n    }\n    fmt.Printf("Usuário criado com ID: %d\\n", user.ID)\n\n    // 4. Leitura de registro (Read)\n    var readUser User\n    db.First(&readUser, user.ID) // Busca pela chave primária\n    fmt.Printf("Usuário encontrado: %+v\\n", readUser)\n\n    // 5. Atualização de registro (Update)\n    db.Model(&readUser).Update("Age", 31)\n    fmt.Printf("Idade atualizada: %d\\n", readUser.Age)\n\n    // 6. Exclusão de registro (Delete)\n    db.Delete(&readUser)\n    fmt.Println("Usuário excluído")\n}
\n\n

Principais métodos/funções do GORM

\n\n

1. gorm.Open(dialector, config)

\n

O que faz: Estabelece uma conexão com o banco de dados. Retorna uma instância de *gorm.DB.

\n

Parâmetros:

\n
    \n
  • dialector — driver do banco de dados (por exemplo, sqlite.Open, mysql.Open, postgres.Open).
  • \n
  • config — configuração do GORM (gorm.Config).
  • \n
\n

Exemplo:

\n
db, err := gorm.Open(mysql.Open("user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})
\n\n

2. db.AutoMigrate(models ...interface{})

\n

O que faz: Cria ou atualiza automaticamente a t

Recommendations