每日一库:ent简介

2023-10-16 19:54:19 浏览数 (1)

ent 是一个由 Facebook 开发的 Go 语言的实体框架,用于构建和维护数据模型。它提供了一种简单的方式来定义、交互和查询数据。

以下是 ent 的一些主要特性和使用方法:

Schema 定义

ent 中,你可以使用 Go 代码来定义你的数据模型(实体)。每个实体都有一个 schema 文件,定义了实体的字段和关系。

代码语言:javascript复制
// ./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"),
        field.Int("age"),
    }
}

生成代码

一旦你定义了 schema,你可以运行 go generate ./ent 来生成实体的 Go 代码。生成的代码包括实体的 CRUD 方法,以及查询 builder。

使用生成的代码

你可以使用生成的代码来创建、查询、更新和删除实体。

代码语言:javascript复制
// ./main.go
package main

import (
    "context"
    "log"

    "<your-project>/ent"
    "<your-project>/ent/user"
)

func main() {
    client, err := ent.Open("sqlite3", "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()

    // Create a User.
    u, err := client.User.
        Create().
        SetAge(30).
        SetName("Alice").
        Save(ctx)
    if err != nil {
        log.Fatalf("failed creating user: %v", err)
    }

    // Query User.
    u, err = client.User.
        Query().
        Where(user.Name("Alice")).
        Only(ctx)
    if err != nil {
        log.Fatalf("failed querying user: %v", err)
    }
}

迁移

ent 还支持 schema 迁移。你可以使用 ent migrate 命令来创建和更新数据库表。

以上就是 ent 的基本使用方法。更多详细的信息和教程,你可以访问 ent 的官方文档:https://entgo.io/docs/getting-started/

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)[1]进行许可,使用时请注明出处。 Author: mengbin[2] blog: mengbin[3] Github: mengbin92[4] cnblogs: 恋水无意[5]

References

[1] 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh [2] mengbin: mengbin1992@outlook.com [3] mengbin: https://mengbin.top [4] mengbin92: https://mengbin92.github.io/ [5] 恋水无意: https://www.cnblogs.com/lianshuiwuyi/

0 人点赞