跳到主要内容

环境设置

本指南面向首次使用的新用户,提供从零开始设置 Ent 项目的详细步骤。 开始之前,请确保您的机器上已安装以下必备组件。

环境要求

安装这些依赖项后,为项目创建目录并初始化 Go 模块:

mkdir todo
cd $_
go mod init todo

安装步骤

运行以下 Go 命令安装 Ent,并初始化项目结构及 Todo 数据模型:

go get entgo.io/ent/cmd/ent
go run -mod=mod entgo.io/ent/cmd/ent new Todo

安装 Ent 并运行 ent new 后,您的项目目录结构应如下所示:

.
├── ent
│ ├── generate.go
│ └── schema
│ └── todo.go
├── go.mod
└── go.sum

ent 目录包含生成的资源文件(详见下一节),ent/schema 目录则存放实体数据模型。

代码生成

之前运行 ent new Todo 时,已在 todo/ent/schema/todo.go 文件中创建了名为 Todo 的数据模型:

package schema

import "entgo.io/ent"

// Todo 定义 Todo 实体的数据模型结构
type Todo struct {
ent.Schema
}

// Todo 的字段配置
func (Todo) Fields() []ent.Field {
return nil
}

// Todo 的关系配置
func (Todo) Edges() []ent.Edge {
return nil
}

如您所见,初始状态下该数据模型未定义任何字段或关系。现在运行以下命令生成与 Todo 实体交互的资源文件:

go generate ./ent

创建测试用例

运行 go generate ./ent 会调用 Ent 的自动代码生成工具,该工具会根据我们在 schema 包中定义的数据模型生成实际用于数据库交互的 Go 代码。此时您可以在 ./ent/client.go 中找到能够查询和操作 Todo 实体的客户端代码。接下来我们创建一个可测试示例来使用这些功能。测试用例中将使用 SQLite 进行验证。

go get github.com/mattn/go-sqlite3
touch example_test.go

将以下代码粘贴到 example_test.go 中,这段代码会实例化 ent.Client 并在数据库中自动创建所有结构资源(表、列等):

package todo

import (
"context"
"log"
"todo/ent"

"entgo.io/ent/dialect"
_ "github.com/mattn/go-sqlite3"
)

func Example_Todo() {
// 创建使用内存式 SQLite 数据库的 ent.Client
client, err := ent.Open(dialect.SQLite, "file:ent?mode=memory&cache=shared&_fk=1")
if err != nil {
log.Fatalf("failed opening connection to sqlite: %v", err)
}
defer client.Close()
ctx := context.Background()
// 运行自动迁移工具创建所有结构资源
if err := client.Schema.Create(ctx); err != nil {
log.Fatalf("failed creating schema resources: %v", err)
}
// Output:
}

随后运行 go test 验证所有功能是否按预期工作:

go test

完成项目设置后,我们现在可以开始创建待办事项列表了。