¿Qué es ent y para qué sirve?
\n\nent es una potente biblioteca ORM (Object-Relational Mapping) para el lenguaje Go que utiliza un enfoque de generación de código. A diferencia de las ORM tradicionales, donde escribes estructuras y anotaciones manualmente, ent genera todo el código basándose en tu esquema de datos, descrito en Go.
\n\nPrincipales ventajas de ent:
\n- \n
- Seguridad de tipos: Todas las consultas se verifican en tiempo de compilación, lo que elimina errores de ejecución relacionados con nombres de campos o tipos incorrectos. \n
- Generación de código: Describes el esquema una vez, y ent genera todas las estructuras necesarias, constructores de consultas, migraciones e incluso pruebas. \n
- Rendimiento: El código generado está optimizado y no utiliza reflexión, lo que lo hace más rápido que muchas otras ORM. \n
- Consultas en grafo: ent permite realizar fácilmente consultas con carga de entidades relacionadas (Eager Loading) y construir consultas complejas en grafo. \n
- Soporte para múltiples bases de datos: MySQL, PostgreSQL, SQLite, Gremlin (para bases de datos en grafo) y otras. \n
ent es ideal para proyectos donde la confiabilidad, el rendimiento y la tipificación estricta son importantes. Se utiliza a menudo en arquitectura de microservicios, sistemas de alta carga y proyectos que requieren una estructura de datos clara.
\n\nInstalación
\n\nLa instalación de ent incluye dos componentes: el paquete en sí y la herramienta CLI para la generación de código.
\n\n# Instalación de la herramienta CLI (una vez)\ngo install entgo.io/ent/cmd/ent@latest\n\n# Inicialización del proyecto (creación de la carpeta ent y el esquema)\nent init User\n\n# Instalación de dependencias\ngo mod tidy\n\n\nDespués de ejecutar estos comandos, tendrás una carpeta ent/ con el archivo schema/user.go, donde describirás el esquema de datos.
Inicio rápido con ejemplo de código
\n\nVamos a crear un modelo de usuario simple y aprender a realizar operaciones básicas.
\n\n1. Descripción del 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. Generación de código
\n\ngo generate ./ent\n\n\nEste comando creará todos los archivos necesarios: cliente, constructores de consultas, migraciones, etc.
\n\n3. Uso en 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 // Creamos un cliente para SQLite (en memoria)\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 // Automigración\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 // Creación de usuario\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 usuario por nombre\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 También en la biblioteca
Programación reactiva en C# (.NET) — Observable, Rx.NET y LINQ
Swift Data para Swift: guía completa con ejemplos
ent para Go: guía completa con ejemplos prácticos
Geolocalización y mapas en C# (.NET): bibliotecas, ejemplos y recomendaciones