Golang Grimoire库v1.2.0版本发布
Golang Grimoire库v1.2.0版本发布 大家好,
Grimoire v1.2.0 版本更新内容:
Grimoire 是一个受 Ecto 启发的数据库访问层。它具有灵活的查询 API 和内置验证功能。目前支持 MySQL、PostgreSQL 和 SQLite3,但可以通过适配器接口轻松实现自定义适配器。
Fs02/grimoire
Go 语言的数据库访问层。通过在 GitHub 上创建账户来为 Fs02/grimoire 的开发做出贡献。
更多关于Golang Grimoire库v1.2.0版本发布的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Grimoire库v1.2.0版本发布的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Grimoire v1.2.0 版本带来了几个重要的功能增强,特别是嵌套事务支持和新的 changeset 方法,这对处理复杂数据库操作非常有用。以下是对这些更新的简要说明和示例代码:
嵌套事务支持
嵌套事务允许在现有事务中开启子事务,这在需要部分操作回滚时特别实用。例如:
import (
"github.com/Fs02/grimoire"
"github.com/Fs02/grimoire/adapter/sqlite3"
)
func main() {
// 初始化适配器
adapter, _ := sqlite3.Open(":memory:")
repo := grimoire.New(adapter)
// 开启主事务
tx, _ := repo.Begin()
defer tx.Rollback() // 确保回滚
// 执行一些操作
tx.Insert("users", grimoire.Map{"name": "Alice"})
// 开启嵌套事务
nestedTx, _ := tx.Begin()
nestedTx.Insert("posts", grimoire.Map{"title": "Hello"})
// 如果嵌套事务失败,可以回滚而不影响主事务
// nestedTx.Rollback()
// 提交嵌套事务
nestedTx.Commit()
// 提交主事务
tx.Commit()
}
changeset.PutAssoc 方法
changeset.PutAssoc 用于处理关联数据的更新,例如在用户模型中更新关联的帖子:
import "github.com/Fs02/grimoire/changeset"
type User struct {
ID int
Name string
Posts []Post
}
type Post struct {
ID int
Title string
UserID int
}
func main() {
user := User{ID: 1, Name: "Bob"}
posts := []Post{{Title: "Post1"}, {Title: "Post2"}}
// 创建 changeset 并设置关联
ch := changeset.Cast(user, []string{"name"})
changeset.PutAssoc(ch, "posts", posts)
// 使用 repo 更新数据库
// repo.Update("users", ch)
}
changeset.Change 方法
changeset.Change 允许手动设置字段变更,这在动态构建更新时很有用:
func main() {
user := User{ID: 1, Name: "Charlie"}
ch := changeset.Cast(user, []string{"name"})
// 手动添加变更
changeset.Change(ch, "age", 30)
// 检查变更
if changeset.GetChange(ch, "age") != nil {
// 处理更新
}
}
这些更新进一步强化了 Grimoire 作为 Go 语言中灵活数据库层的能力,特别是在处理事务和关联数据时。开发者可以参考官方文档和 GitHub 发布页面获取更多细节。

