O que é ent e para que serve?
\n\nent é 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\nPrincipais 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
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\nInstalação
\n\nA 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\nApós executar esses comandos, você terá uma pasta ent/ com o arquivo schema/user.go, onde descreverá o esquema de dados.
Início rápido com exemplo de código
\n\nVamos criar um modelo simples de usuário e aprender a realizar operações básicas.
\n\n1. Descrição do esquema (ent/schema/user.go)
\n\npackage 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\n2. Geração de código
\n\ngo generate ./ent\n\n\nEste comando criará todos os arquivos necessários: cliente, construtores de consultas, migrações, etc.
\n\n3. Uso no main.go
\n\npackage 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 Também na biblioteca
Parsing de HTML em Kotlin: jsoup, ktor, khtml e outras ferramentas
Envio de email em Kotlin: bibliotecas, exemplos e configuração SMTP
Biblioteca WebSocket em C++: guia completo para escolha e uso