疾速开始
简介
ent 是一个简略而弱小的 Go 语言实体框架,它使得构建和保护大型数据模型的应用程序变得容易,同时 ent 遵循以下准则:
- 轻松地将数据库模式建模为图形构造
- 将模式定义为可编程的 Go 语言代码
- 基于代码生成的动态类型
- 易于编写的数据库查问和图遍历
- 简略地扩大和应用 Go 模版进行自定义
设置 Go 环境
如果你的我的项目目录在 GOPATH 之外,或者你不相熟 GOPATH,可通过如下的命令进行 Go module 设置
go mod init entdemo
创立第一个模式(Schema)
在我的项目的根目录运行以下命令:
go run -mod=mod entgo.io/ent/cmd/ent new <Schema-name>
该命令会在指定目录:<project>/ent/schema/ 下生成指定 <Schema-name> 的模式(示例中 Schema 为 User):
package schema
import "entgo.io/ent"
// User holds the schema definition for the User entity.
type User struct {ent.Schema}
// Fields of the User.
func (User) Fields() []ent.Field {return nil}
// Edges of the User.
func (User) Edges() []ent.Edge {return nil}
向 Schema 中增加 2 个字段:
package schema
import (
"entgo.io/ent"
"entgo.io/ent/schema/field"
)
// Fields of the User.
func (User) Fields() []ent.Field {return []ent.Field{field.Int("age").
Positive(),
field.String("nickname").
Default("unknown"),
}
}
在我的项目的根目录运行 go generate
命令生成文件:
go generate ./ent
生成文件如下:
ent
├── client.go
├── config.go
├── context.go
├── ent.go
├── generate.go
├── mutation.go
... truncated
├── schema
│ └── user.go
├── tx.go
├── user
│ ├── user.go
│ └── where.go
├── user.go
├── user_create.go
├── user_delete.go
├── user_query.go
└── user_update.go
创立第一个实体(Entity)
首先,创立一个新的 ent.Client,示例中将应用 MySQL
package main
import (
"context"
"log"
"entdemo/ent"
_ "github.com/go-sql-driver/mysql"
)
func main() {client, err := ent.Open("mysql", "<user>:<pass>@tcp(<host>:<port>)/<database>?parseTime=True")
if err != nil {log.Fatalf("failed opening connection to mysql: %v", err)
}
defer client.Close()
// Run the auto migration tool.
if err := client.Schema.Create(context.Background()); err != nil {log.Fatalf("failed creating schema resources: %v", err)
}
}