乐趣区

关于测试开发: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)
    }
}

构造

引言

代码生成

迁徙

退出移动版