在开发Web应用或后端服务时,我们经常需要“删除”数据,但又不希望真正从数据库中物理移除记录。这时候就需要用到软删除(Soft Delete)功能。本文将围绕 GORM软删除 这一主题,手把手教你如何在 Go语言 中使用 GORM ORM框架 实现软删除,即使是编程新手也能轻松上手!

软删除并不是真正地从数据库中删除记录,而是通过一个字段(通常是 deleted_at)来标记该记录已被“删除”。查询时,GORM会自动忽略这些被标记的记录,从而达到逻辑删除的效果。
相比硬删除(物理删除),软删除有以下优势:
GORM 内置了对软删除的支持。你只需要在结构体中嵌入 gorm.DeletedAt 字段(或使用 gorm.Model,它已包含该字段),GORM 就会自动启用软删除功能。
package mainimport ( "gorm.io/gorm" "gorm.io/driver/sqlite" // 或 mysql、postgres 等)// User 模型type User struct { ID uint `gorm:"primaryKey"` Name string Email string gorm.DeletedAt // 关键:启用软删除}// 或者直接使用 gorm.Model(它内部已包含 DeletedAt)// type User struct {// gorm.Model// Name string// Email string// }当你调用 db.Delete() 方法时,GORM 不会真正删除记录,而是将当前时间写入 deleted_at 字段。
// 初始化数据库(以 SQLite 为例)db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})if err != nil { panic("failed to connect database")}// 自动迁移db.AutoMigrate(&User{})// 创建用户user := User{Name: "张三", Email: "zhangsan@example.com"}db.Create(&user)// 软删除用户db.Delete(&user)// 此时数据库中的 deleted_at 字段会被设置为当前时间默认情况下,GORM 查询不会返回已被软删除的记录:
var users []User// 只会查出未被删除的用户db.Find(&users)如果你确实需要查看或恢复被删除的数据,可以使用 Unscoped() 方法:
// 查询所有记录,包括已软删除的var allUsers []Userdb.Unscoped().Find(&allUsers)// 恢复某条记录(清空 deleted_at)db.Unscoped().Model(&User{}).Where("id = ?", 1).Update("deleted_at", nil)虽然 GORM 默认使用 deleted_at,但你也可以自定义软删除字段。不过这需要实现 gorm.DeletedAtField 接口,对初学者来说建议使用默认方式。
通过本文,你已经掌握了在 Go语言 中使用 GORM ORM框架 实现 软删除 的完整流程。只需在模型中加入 gorm.DeletedAt,GORM 就会自动处理软删除逻辑,极大简化了开发工作。
记住关键词:GORM软删除、GORM Go语言、Go语言ORM框架、软删除实现教程,它们将帮助你在项目中快速定位相关技术方案。
赶快在你的项目中试试吧!如有疑问,欢迎留言交流。
本文由主机测评网于2025-12-25发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251212608.html