Go with Ent ORM Project Structure
Ent ORM with schema-as-code. Define entities in Go, generate type-safe DB operations.
Project Directory
myproject/
main.go
Entry point
go.mod
go.sum
Makefile
generate, migrate commands
.env.example
.gitignore
cmd/
api/
main.go
ent/
Ent schema and generated code
generate.go
go:generate directive
client.go
Generated client
user.go
Generated User type
user_create.go
Generated builder
user_query.go
Generated queries
schema/
Your schema definitions
user.go
User entity schema
post.go
migrate/
Migration files
schema.go
internal/
handler/
handler.go
users.go
service/
user_service.go
router/
router.go
Why This Structure?
Ent is a powerful entity framework for Go. Define schemas in pure Go code, run go generate, and get type-safe CRUD operations, eager loading, and migrations. No struct tags, no magic—schemas are explicit code.
Key Directories
- ent/schema/-Your entity definitions in Go code
- ent/-Generated client, types, and query builders
- ent/migrate/-Auto-generated migration files
- internal/service/-Business logic using ent client
Ent Schema Definition
// ent/schema/user.go
func (User) Fields() []ent.Field {
return []ent.Field{
field.String("email").Unique(),
field.String("name").Optional(),
field.Time("created_at").Default(time.Now),
}
}
func (User) Edges() []ent.Edge {
return []ent.Edge{
edge.To("posts", Post.Type),
}
}
Getting Started
go install entgo.io/ent/cmd/ent@latestent new User- Define fields and edges in
ent/schema/user.go go generate ./ent- Use
ent.Clientin your handlers
When To Use This
- Prefer code-first schema definitions
- Need type-safe query builders
- Complex relationships (edges) between entities
- Want automatic migration generation
- Teams who dislike writing raw SQL
Trade-offs
- Generated code volume-ent/ directory grows with entity count
- Learning curve-Ent DSL takes time to master
- Complex queries-Some advanced SQL requires raw queries
Testing Strategy
- enttest package-In-memory SQLite client for fast tests
- Integration tests-Real Postgres with testcontainers
- Schema validation-ent/schema tests ensure valid definitions