设置
本指南适用于希望了解如何从零开始设置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 的模式在 todo/ent/schema/ 目录下的 todo.go 文件中被创建:
package schema
import "entgo.io/ent"
// Todo holds the schema definition for the Todo entity.
type Todo struct {
ent.Schema
}
// Fields of the Todo.
func (Todo) Fields() []ent.Field {
return nil
}
// Edges of the Todo.
func (Todo) Edges() []ent.Edge {
return nil
}
如你所见,刚开始模式没有定义字段和边。让我们运行命令生成资产来与 Todo 实体进行交互:
go generate ./ent
创建测试用例
运行 go generate ./ent 唤起 Ent 自动代码生成工具,此工具使用 schema 包中定义的模式生成实际的 Go 语言代码,我们将使用此代码与数据库进行交互。
当前阶段,你可以在 ./ent/client.go 得到能够查询和修改 Todo 实体的客户端代码。
让我们用它创建一个 测试用例。
我们在测试用例中使用 SQLite 测试 Ent。
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() {
// Create an ent.Client with in-memory SQLite database.
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()
// Run the automatic migration tool to create all schema resources.
if err := client.Schema.Create(ctx); err != nil {
log.Fatalf("failed creating schema resources: %v", err)
}
// Output:
}
然后运行 go test 验证所有内容符合预期。
go test
设置完成项目后,我们就可以创建代办事项清单(Todo list)了。