Ent.中文文档(持续更新~)
快速开始
简介
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)
}
}