ent 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 é ent e para que serve?

\n\n

ent é uma poderosa biblioteca ORM (Object-Relational Mapping) para a linguagem Go, que utiliza a abordagem de geração de código. Ao contrário das ORMs tradicionais, onde você escreve estruturas e anotações manualmente, o ent gera todo o código com base no seu esquema de dados, descrito em Go.

\n\n

Principais vantagens do ent:

\n
    \n
  • Segurança de tipos: Todas as consultas são verificadas em tempo de compilação, eliminando erros de execução relacionados a nomes de campos ou tipos incorretos.
  • \n
  • Geração de código: Você descreve o esquema uma vez, e o ent gera todas as estruturas necessárias, construtores de consultas, migrações e até testes.
  • \n
  • Desempenho: O código gerado é otimizado e não usa reflexão, tornando-o mais rápido que muitas outras ORMs.
  • \n
  • Consultas em grafo: O ent permite executar facilmente consultas com carregamento de entidades relacionadas (Eager Loading) e construir consultas complexas em grafo.
  • \n
  • Suporte a vários bancos de dados: MySQL, PostgreSQL, SQLite, Gremlin (para bancos de grafo) e outros.
  • \n
\n\n

O ent é ideal para projetos onde confiabilidade, desempenho e tipagem estrita são importantes. Ele é frequentemente usado em arquitetura de microsserviços, sistemas de alta carga e projetos que exigem uma estrutura de dados clara.

\n\n

Instalação

\n\n

A instalação do ent inclui dois componentes: o pacote em si e a ferramenta CLI para geração de código.

\n\n
# Instalação da ferramenta CLI (uma vez)\ngo install entgo.io/ent/cmd/ent@latest\n\n# Inicialização do projeto (cria a pasta ent e o esquema)\nent init User\n\n# Instalação das dependências\ngo mod tidy\n
\n\n

Após executar esses comandos, você terá uma pasta ent/ com o arquivo schema/user.go, onde descreverá o esquema de dados.

\n\n

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

\n\n

Vamos criar um modelo simples de usuário e aprender a realizar operações básicas.

\n\n

1. Descrição do esquema (ent/schema/user.go)

\n\n
package schema\n\nimport (\n    "entgo.io/ent"\n    "entgo.io/ent/schema/field"\n)\n\n// User holds the schema definition for the User entity.\ntype User struct {\n    ent.Schema\n}\n\n// Fields of the User.\nfunc (User) Fields() []ent.Field {\n    return []ent.Field{\n        field.String("name").\n            NotEmpty().\n            Unique(),\n        field.Int("age").\n            Positive(),\n        field.String("email").\n            Unique(),\n    }\n}\n
\n\n

2. Geração de código

\n\n
go generate ./ent\n
\n\n

Este comando criará todos os arquivos necessários: cliente, construtores de consultas, migrações, etc.

\n\n

3. Uso no main.go

\n\n
package main\n\nimport (\n    "context"\n    "fmt"\n    "log"\n\n    "your-project/ent"\n    "your-project/ent/user"\n    _ "github.com/mattn/go-sqlite3"\n)\n\nfunc main() {\n    // Cria um cliente para SQLite (em memória)\n    client, err := ent.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1")\n    if err != nil {\n        log.Fatalf("failed opening connection to sqlite: %v", err)\n    }\n    defer client.Close()\n\n    // Automigração\n    ctx := context.Background()\n    if err := client.Schema.Create(ctx); err != nil {\n        log.Fatalf("failed creating schema resources: %v", err)\n    }\n\n    // Criação de usuário\n    newUser, err := client.User.\n        Create().\n        SetName("Alice").\n        SetAge(30).\n        SetEmail("alice@example.com").\n        Save(ctx)\n    if err != nil {\n        log.Fatalf("failed creating user: %v", err)\n    }\n    fmt.Println("Created user:", newUser.ID)\n\n    // Consulta de usuário por nome\n    foundUser, err := client.User.\n        Query().\n        Where(user.Name("Alice")).\n        Only(ctx)\n    if err != nil {\n        log.Fatalf("failed querying user: %v", err)\n    }\n    fmt.Printf("Found use                    

Recommendations