Effortless Record Deletion with GORM in Go: A Comprehensive Guide.

Effortless Record Deletion with GORM in Go: A Comprehensive Guide.


3 min read

Efficiently managing and removing records from databases is pivotal in maintaining data integrity within Go applications. GORM, the Object Relational Mapping library for Go, streamlines the process of deleting records within databases. Let's embark on an extensive exploration to unravel the intricacies of deleting records using GORM, empowering you to seamlessly remove data within your Go applications.


Before diving into deleting records with GORM, ensure you've met the following prerequisites:

  • GORM library installed in your Go environment.

  • A configured database connection using GORM, as detailed in previous guides.

Step 1: Defining Your Model

Models in GORM represent tables in your database. Define the model structure for the records you intend to delete. For instance, consider a User model:

package models

import "github.com/go-gorm/gorm"

type User struct {
    Name  string
    Email string `gorm:"unique"`
    Age   int
    // Add other fields as needed

The User struct mirrors a table in the database with fields like Name, Email, and Age. The gorm.Model embedding includes default fields managed by GORM such as ID, CreatedAt, UpdatedAt, and DeletedAt.

Step 2: Removing Records

Deleting a Single Record

GORM simplifies the process of deleting records using its Delete method:

var user models.User

// Retrieve a user by ID
db.First(&user, 1)

// Delete the user

Replace 1 with the ID of the record you want to delete. The Delete method removes the specified record from the database.

Soft Delete (Using Soft Delete with GORM)

Soft deletion involves marking a record as deleted without physically removing it from the database. GORM supports soft delete using its Delete method along with the DeletedAt field in the model:

// Define a 'DeletedAt' field in the model
type User struct {
    Name      string
    Email     string `gorm:"unique"`
    Age       int
    DeletedAt gorm.DeletedAt // Enable soft delete by adding a 'DeletedAt' field
    // Add other fields as needed

// Perform soft delete

GORM automatically updates the DeletedAt field with the current timestamp, indicating that the record has been soft deleted.

Batch Deletion

For bulk deletion of records based on certain conditions, GORM's Where method combined with Delete can be used:

// Delete users older than 30
db.Where("age > ?", 30).Delete(&models.User{})

This code snippet deletes all records from the users table where the Age field is greater than 30.

Step 3: Restoring Soft Deleted Records

In scenarios involving soft deletion, GORM allows restoring soft deleted records:

// Restore soft deleted user by ID
db.Unscoped().Model(&models.User{}).Where("id = ?", 1).Update("deleted_at", nil)

This code snippet removes the DeletedAt timestamp for the user with ID 1, effectively restoring the soft deleted record.

Permanently Deleting Soft Deleted Records

To permanently remove soft deleted records from the database, utilize GORM's Unscoped().Delete method:

// Permanently delete soft deleted users older than 60 days
db.Unscoped().Where("deleted_at < ?", time.Now().AddDate(0, 0, -60)).Delete(&models.User{})

This code permanently deletes records that have been soft deleted more than 60 days ago.


Congratulations! You've mastered the art of deleting records using GORM in Go. By following these steps, you've learned how to remove single and multiple records, perform soft deletions, restore soft deleted records, and permanently delete soft deleted records using GORM's intuitive methods.

Understanding and applying these techniques for deleting records empower you to efficiently manage data removal within your Go applications. As you explore GORM further, you'll discover more advanced deletion operations and leverage them to handle complex database interactions seamlessly.

I hope this helps, you!!

More such articles:





Did you find this article valuable?

Support techwasti by becoming a sponsor. Any amount is appreciated!