Web应用数据持久化:Golang库推荐
Web应用数据持久化:Golang库推荐 我知道Buffalo的pop库遵循ActiveRecord约定。但是,我想使用一个既借鉴了ActiveRecord经验,也吸收了DataMapper经验的库。
理想情况下,是Go语言中设计类似于rom-rb的库。
Go语言中有这样的库吗?
先谢了。
2 回复
请查看 Awesome Go 项目的 ORM 部分。
更多关于Web应用数据持久化:Golang库推荐的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,确实有结合ActiveRecord和DataMapper设计思想的库。以下是几个推荐:
- GORM - 最流行的Go ORM,支持ActiveRecord模式,也提供DataMapper的灵活性
// ActiveRecord风格
user := User{Name: "John", Age: 30}
result := db.Create(&user)
// DataMapper风格
var users []User
db.Model(&User{}).Where("age > ?", 25).Find(&users)
- ent - Facebook开源的实体框架,采用代码生成方式
// 生成实体后使用
client.User.
Create().
SetName("John").
SetAge(30).
Save(ctx)
- sqlx + sqlc组合 - 轻量级方案
// sqlc生成的类型安全查询
const getUser = `SELECT * FROM users WHERE id = $1`
func (q *Queries) GetUser(ctx context.Context, id int64) (User, error)
// sqlx执行原生查询
var user User
err := db.Get(&user, "SELECT * FROM users WHERE id = ?", 1)
- bun - 基于sqlx的ORM,支持复杂查询
// 支持链式调用和复杂查询
err := db.NewSelect().
Model(&users).
Where("age > ?", 25).
Order("created_at DESC").
Limit(10).
Scan(ctx)
这些库都不同程度地借鉴了ActiveRecord的便捷性和DataMapper的清晰数据层分离。GORM最接近传统ORM体验,ent更适合大型项目,sqlx/sqlc组合则提供最大灵活性。

