疾速开始

简介

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)    }}

构造

引言

代码生成

迁徙