DEV Community

Cover image for Using GORM as an ORM in Go: A Quick Overview
Diogo
Diogo

Posted on

Using GORM as an ORM in Go: A Quick Overview

GORM is one of the most popular Object Relational Mappers for Go. It provides a clean, expressive API for interacting with databases, abstracting away much of the boilerplate SQL code while still allowing fine-tuned control when needed.

Getting Started

To start using GORM, first install the library:

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite # or another driver like mysql/postgres
Enter fullscreen mode Exit fullscreen mode

Then, set up a simple connection:

import (
    "gorm.io/gorm"
    "gorm.io/driver/sqlite"
)

db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
    panic("failed to connect database")
}
Enter fullscreen mode Exit fullscreen mode

Defining Models

You define your data structures as Go structs. GORM uses reflection to map these to database tables:

type User struct {
    gorm.Model
    Name  string
    Email string
}
Enter fullscreen mode Exit fullscreen mode

Basic Operations

Create:

db.Create(&User{Name: "Alice", Email: "alice@example.com"})
Enter fullscreen mode Exit fullscreen mode

Read:

var user User
db.First(&user, 1) // find user with ID 1
db.Where("name = ?", "Alice").First(&user)
Enter fullscreen mode Exit fullscreen mode

Update:

db.Model(&user).Update("Email", "new@example.com")
Enter fullscreen mode Exit fullscreen mode

Delete:

db.Delete(&user)
Enter fullscreen mode Exit fullscreen mode

Why Use GORM?

  • Productivity: Less boilerplate, cleaner code.
  • Portability: Works with multiple databases.
  • Flexibility: Lets you drop down to raw SQL when needed.

Downsides

  • Slightly larger binary size.
  • May not be the fastest for high-performance use cases — consider raw SQL or sqlx if needed.

Conclusion

GORM is a great tool for building Go applications that need reliable database interaction with minimal friction. It’s especially useful for rapid development, small to medium-sized apps, and teams looking for readability over raw performance.

Top comments (2)

Collapse
 
parizad profile image
Parizad

Great!

Collapse
 
diogojlq profile image
Diogo

Thank you!