疾速开始
简介
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 schemaimport "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 schemaimport ( "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 mainimport ( "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) }}