写 Go 项目绕不开数据库操作。原生 SQL 虽然灵活,但代码里到处拼接字符串实在让人头疼。GORM 就是来解决这个问题的——它是 Go 语言最流行的 ORM 库,让你用结构体和链式调用操作数据库,代码干净又好维护。
GORM 全称 Go Object Relational Mapping,简单说就是把数据库表映射成 Go 结构体,把 SQL 操作变成方法调用。你定义一个 User 结构体,GORM 帮你生成对应的 users 表;你想查用户,调用 db.First(&user, 1) 就行,不用手写 SELECT。
目前 GORM 已经是 Go 生态中最活跃的 ORM 项目,GitHub 星标超过 3 万,被大量项目采用。
// 创建
user := User{Name: "张三", Age: 25}
db.Create(&user)
// 查询
db.First(&user, 1)
// 更新
db.Model(&user).Update("Age", 26)
// 删除
db.Delete(&user)
db.Where("age > ?", 18).
Where("name LIKE ?", "%张%").
Order("created_at desc").
Limit(10).
Find(&users)
type User struct {
ID uint
Name string
Orders []Order // 一对多
}
type Order struct {
ID uint
UserID uint
User User // 属于
}
// 查询用户时自动加载订单
db.Preload("Orders").First(&user, 1)
db.AutoMigrate(&User{}, &Order{})
不用手写 SQL,不用手动扫描结果到结构体。定义好模型,剩下的交给 GORM。
MySQL、PostgreSQL、SQLite、SQL Server 都能用,换数据库只改连接字符串,业务代码不用动。
遇到问题搜一下基本都有答案,官方文档也比较完善。
ORM 不是万能的,有些场景还是要用原生 SQL:
GORM 也考虑到了这点,提供了 Raw() 和 Exec() 方法执行原生 SQL。
GORM 适合:
不太适合:
GORM 目前主版本是 v2,与 v1 有较大变化:
本书内容基于 GORM v2,如果你还在用 v1,建议尽快升级。
GORM 是 Go 语言中最成熟的 ORM 库,能显著提升开发效率。它把数据库操作抽象成对象方法调用,让你专注于业务逻辑而不是 SQL 细节。当然,ORM 不是银弹,复杂场景下原生 SQL 仍然不可替代。理解 GORM 的能力边界,在合适的场景使用它,才能真正发挥价值。