阅读指南

本文记录 GORM 在 Go 后端项目里的常用写法。

GORM 是 Go 里常用的 ORM 库。ORM 可以把数据库表和 Go 结构体对应起来,用 Go 代码完成常见的增删改查。

阅读前置:

知识点说明
Go 结构体type User struct {} 是定义结构体
Go 模块go mod initgo get
MySQL 基础数据库、表、字段、主键
SQL 基础至少见过 SELECTINSERTUPDATEDELETE

MySQL 基础可参考本站 MySQL 笔记。

一、使用写法

本文档以 GORM 官方文档中的稳定写法为主,默认使用传统 API:

db.Create(&user)
db.First(&user, 1)
db.Model(&user).Update("Name", "Tom")
db.Delete(&user)

GORM 也提供了泛型 API:

gorm.G[User](db).Create(ctx, &user)

泛型 API 类型更明确,但概念更多。本文档先使用传统 API,最后简单说明泛型 API 的位置。

二、阅读顺序

按这个顺序阅读:

  1. 快速入门:认识 GORM,安装依赖,连接 MySQL。
  2. 模型和迁移:用结构体描述表结构,并用 AutoMigrate 创建表。
  3. 增删改查:常用 CRUD。
  4. 查询进阶:条件、排序、分页、统计和错误处理。
  5. 关联关系:理解一对多、多对多和预加载。
  6. 工程整合:学习连接池、配置拆分、Gin 中如何使用 GORM。

三、示例约定

示例数据库:

gorm_tutorial

示例会围绕这些表:

Go 模型含义
usersUser用户
articlesArticle文章
commentsComment评论
tagsTag标签

Go 字段使用大驼峰,数据库字段默认会转成下划线:

Go 字段数据库字段
UserNameuser_name
CreatedAtcreated_at
ArticleIDarticle_id

四、不要把 GORM 当成不用学 SQL

GORM 能减少重复 SQL,但不是替代 SQL 基础。

仍然需要关注:

  • 哪些字段应该建索引
  • 查询条件会不会走索引
  • 事务什么时候需要使用
  • Preload 会产生额外查询
  • 更新和删除时必须确认条件

GORM 写得好,前提是知道它大概会生成什么 SQL。

五、官方资料