简介
ent 是一个简单而又强大的Go实体框架,便于构建和使用大型数据模型时能够遵循以下原则:
简单地使用数据库结构作为图结构。
使用Go代码定义结构。
基于代码生成的静态类型。
容易地进行数据库查询和图遍历。
容易地使用Go模板扩展和自定义。
应用场景
entgo
非常适合处理各种复杂的关系,定义好实体和实体之间的关系,就可以快速得到各种想要的数据
核心概念
Schema:描述一个实体的定义以及他与其他实体的关系
Edges:实体与实体之间的关系称为edge
如何使用
安装
go get entgo.io/ent/cmd/ent
创建Schema
ent init --target internal/ent/schema User
运行之后会在internal/ent/schema目录下生成一个user.go文件,并进行编辑:
package schema
import (
"entgo.io/ent"
"entgo.io/ent/schema/edge"
"entgo.io/ent/schema/field"
)
// User holds the schema definition for the User entity.
type User struct {
ent.Schema
}
// Fields of the User.
func (User) Fields() []ent.Field {
return []ent.Field{
// 年龄是自然数
field.Int("age").Positive(),
field.String("name").Default("unknown"),
}
}
// Edges of the User.
func (User) Edges() []ent.Edge {
return []ent.Edge{
}
}
生成代码
ent generate ./internal/ent/schema
运行之后会自动创建以下文件:
ent
├── client.go
├── config.go
├── context.go
├── ent.go
├── migrate
│ ├── migrate.go
│ └── schema.go
├── predicate
│ └── predicate.go
├── schema
│ └── user.go
├── tx.go
├── user
│ ├── user.go
│ └── where.go
├── user.go
├── user_create.go
├── user_delete.go
├── user_query.go
└── user_update.go
创建实体
package main
import (
"context"
"log"
"<project>/ent"
_ "github.com/mattn/go-sqlite3"
)
func main() {
client, err := ent.Open(