跳到主要内容

设置

让我们为项目初始化一个新的 Go 语言模块:

mkdir ent-grpc-example
cd ent-grpc-example
go mod init ent-grpc-example

下一步使用 go run 触发代码生成器来初始化模式:

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

我们的目录现在看起来是这样的:

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

下一步向项目添加 entproto 包:

go get -u entgo.io/contrib/entproto

下一步为 User 实体定义模式。打开 ent/schema/user.go 并编辑它:

ent/schema/user.go
package schema

import (
"entgo.io/ent"
"entgo.io/ent/schema/field"
)

// User holds the schema definition for the User entity.
type User struct {
ent.Schema
}

// Fields of the User.
func (User) Fields() []ent.Field {
return []ent.Field{
field.String("name").
Unique(),
field.String("email_address").
Unique(),
}
}

在这一步中我们为 User 实体添加两个唯一的字段:nameemail_addressent.Schema 是模式的定义, 我们需要在它上面运行 Ent 代码生成工具来创建可用的生产环境代码。运行:

go generate ./...

可以看到模式定义中的文件已经被创建了:

├── ent
│ ├── client.go
│ ├── config.go
// .... many more
│ ├── user
│ ├── user.go
│ ├── user_create.go
│ ├── user_delete.go
│ ├── user_query.go
│ └── user_update.go
├── go.mod
└── go.sum

目前我们可以建立数据库连接并运行迁移来创建 users 表,然后向其读写数据了。 这些内容已在 设置教程 中有所说明, 因此我们直接进入正题学习如何由模式生成 Protobuf 定义和 gRPC 服务器。