Golang魔法书v1.3.0版本发布

Golang魔法书v1.3.0版本发布 大家好,

Grimoire v1.3.0 的新特性:

  • 变更集获取和提取字段(#41
  • 预加载目标类型如果是指针则保持不变(#44
  • 在类型转换时处理空结构和空值(#40
  • 变更应接受已修改的值(#46
  • 修复转换空接口的问题(#47
  • 悲观锁定(#48
  • 修复聚合查询(#49
  • 修复严格模式下的 MySQL 测试(#51
  • 允许禁用字段转义(#50
  • 表单参数(#45
  • 修复别名类型的空参数值字段(#52
  • 修复转换其他变更集时的空值问题(#53

Grimoire 是一个受 Ecto 启发的数据库访问层。它具有灵活的查询 API 和内置验证功能。目前支持 MySQL、PostgreSQL 和 SQLite3,但可以通过 Adapter 接口轻松实现自定义适配器。

GitHub GitHub

头像

Fs02/grimoire

Golang 的数据库访问层。通过在 GitHub 上创建账户为 Fs02/grimoire 的开发做出贡献。


更多关于Golang魔法书v1.3.0版本发布的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang魔法书v1.3.0版本发布的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Grimoire v1.3.0 的发布带来了多项重要改进,这些特性显著提升了数据库操作的灵活性和稳定性。以下是对关键新特性的技术分析及示例代码:

1. 变更集获取和提取字段(#41) 变更集现在支持字段提取,便于在更新操作中精确控制修改的字段。示例:

changeset := grimoire.Changeset(user, params)
// 提取特定字段
nameChange := changeset.Extract("name")

2. 预加载指针类型保持(#44) 预加载关联数据时,如果目标类型是指针,现在会保持指针引用不变:

var user User
repo.Preload("Profile").Find(&user, 1)
// user.Profile 保持为 *Profile 类型

3. 悲观锁定支持(#48) 新增悲观锁功能,防止并发数据竞争:

repo.Find(&user, 1, grimoire.Lock("FOR UPDATE"))

4. 聚合查询修复(#49) 修复了聚合函数在复杂查询中的执行问题:

var count int
repo.From("users").Aggregate("count", &count)

5. 字段转义控制(#50) 允许禁用自动字段转义,提升特殊场景下的灵活性:

repo := grimoire.New(adapter, grimoire.Escape(false))

6. 空值处理改进(#40, #47, #53) 全面优化了空结构和空接口的转换逻辑:

// 空结构现在能正确转换为数据库NULL值
var emptyStruct struct{}
repo.Insert(&emptyStruct)

这些改进使Grimoire在类型安全、并发控制和查询灵活性方面达到了新的水平。特别是悲观锁定和聚合查询修复,对高并发应用场景具有重要意义。

回到顶部