REL v0.3.0发布:Golang分层架构中的SQL数据库层实现

REL v0.3.0发布:Golang分层架构中的SQL数据库层实现 变更日志:

  • 性能监控(#40
  • 迭代器(#46
  • 新增用于分页的 FindAndCountAll 方法(#41
  • 更一致的 Insert/Update API 签名(#44
  • 支持使用 errors.Is 进行错误处理(#50
  • DeleteAll 方法现在只接受查询链(#53
  • 使默认日志记录器输出更简洁(#45
  • 更新 Travis CI 配置(#51
  • [文档] 添加性能监控说明及其他微小改进(#52

GitHub

Fs02/rel

用于分层架构的 Golang SQL 数据库层。 - Fs02/rel


更多关于REL v0.3.0发布:Golang分层架构中的SQL数据库层实现的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于REL v0.3.0发布:Golang分层架构中的SQL数据库层实现的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


REL v0.3.0 的发布为 Go 语言的分层架构带来了更强大的 SQL 数据库层支持。这次更新在性能监控、查询迭代和 API 一致性方面都有显著改进,特别是新增的 FindAndCountAll 方法对分页场景非常实用。

让我通过示例代码展示几个关键特性:

1. 性能监控集成

import (
    "github.com/Fs02/rel"
    "github.com/Fs02/rel/adapter/mysql"
    "github.com/prometheus/client_golang/prometheus"
)

// 启用查询性能监控
adapter, _ := mysql.Open("root@(127.0.0.1:3306)/rel_test?charset=utf8")
repo := rel.New(adapter, rel.Instrument(prometheus.DefaultRegisterer))

// 监控指标会自动收集到 Prometheus

2. 新增的 FindAndCountAll 分页方法

// 传统分页需要两次查询
var users []User
repo.FindAll(ctx, &users, rel.Offset(10), rel.Limit(20))
total, _ := repo.Count(ctx, "users")

// v0.3.0 新增的单一方法
var users []User
total, err := repo.FindAndCountAll(ctx, &users, rel.Offset(10), rel.Limit(20))
// total 包含总记录数,users 包含当前页数据

3. 更一致的 Insert/Update API

// 之前版本 API 不一致
repo.Insert(ctx, &user)           // 返回错误
updated, err := repo.Update(ctx, &user)  // 返回布尔值和错误

// v0.3.0 统一了签名
err := repo.Insert(ctx, &user)    // 统一返回错误
err := repo.Update(ctx, &user)    // 统一返回错误

4. 改进的错误处理支持

import "errors"

var (
    ErrNotFound = errors.New("not found")
)

// 使用 errors.Is 检查特定错误
err := repo.Find(ctx, &user, rel.Eq("id", 999))
if errors.Is(err, rel.ErrNotFound) {
    // 处理记录不存在的情况
}

5. 迭代器支持大数据集处理

// 使用迭代器避免一次性加载所有数据
iter, err := repo.Iterate(ctx, rel.From("users").SortAsc("id"))
defer iter.Close()

for {
    var user User
    if !iter.Next(&user) {
        break
    }
    // 处理每个用户,内存效率更高
}

6. 简化的 DeleteAll 使用

// 现在只接受查询链,更安全
err := repo.DeleteAll(ctx, rel.From("users").Where(rel.Eq("status", "inactive")))
// 防止意外删除所有记录

这些改进使得 REL 在处理复杂查询、性能监控和大数据集时更加高效和可靠。特别是性能监控的集成和 FindAndCountAll 方法的加入,在实际项目中能显著提升开发效率和系统可观测性。

回到顶部