一个致力于对开发者友好的优秀 Golang ORM 库。 特性 全功能 ORM 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方法 支持 Preload、Joins 的预加载 事务,嵌套事务,Save Point,Rollback To Saved Point Cont

GORM 是一个致力于对开发者友好的优秀 Golang ORM 库,旨在为 Go 语言开发者提供全功能的对象关系映射能力。其官方指南站点提供了从入门到高级主题的完整中文文档。
GORM 具备以下主要特性:
通过以下命令安装 GORM 及对应数据库驱动(示例为 SQLite):
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
GORM 支持泛型 API 与传统 API 两种使用方式。
package main
import (
"context"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type Product struct {
gorm.Model
Code string
Price uint
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("连接数据库失败")
}
ctx := context.Background()
// 自动建表
db.AutoMigrate(&Product{})
// 创建
err = gorm.G[Product](db).Create(ctx, &Product{Code: "D42", Price: 100})
// 查询
product, err := gorm.G[Product](db).Where("id = ?", 1).First(ctx)
products, err := gorm.G[Product](db).Where("code = ?", "D42").Find(ctx)
// 更新 - 将产品价格更新为 200
err = gorm.G[Product](db).Where("id = ?", product.ID).Update(ctx, "Price", 200)
// 更新 - 更新多个字段
err = gorm.G[Product](db).Where("id = ?", product.ID).Updates(ctx, Product{Code: "D42", Price: 100})
// 删除 - 删除产品
err = gorm.G[Product](db).Where("id = ?", product.ID).Delete(ctx)
}
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type Product struct {
gorm.Model
Code string
Price uint
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("连接数据库失败")
}
// 自动建表
db.AutoMigrate(&Product{})
// 创建
db.Create(&Product{Code: "D42", Price: 100})
// 查询
var product Product
db.First(&product, 1)
db.First(&product, "code = ?", "D42")
// 更新 - 将产品价格更新为 200
db.Model(&product).Update("Price", 200)
// 更新 - 更新多个字段
db.Model(&product).Updates(Product{Price: 200, Code: "F42"})
db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})
// 删除 - 删除产品
db.Delete(&product, 1)
}
GORM 适用于使用 Go 语言进行后端开发、需要便捷操作关系型数据库的项目。无论是快速搭建原型,还是构建具备复杂关联、事务和多数据库支持的规模化服务,均可借助其全功能 ORM 能力与插件体系提升开发效率。其详尽的指南文档覆盖了从声明模型、连接数据库到编写插件、性能调优等各个阶段,适合个人开发者及团队参考使用。