Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
Go

02 Deklarasi Model pada GORM: Panduan Lengkap ORM di Golang

· 3 mnt baca ·Ihsan Arif

Pelajari cara deklarasi model pada GORM, library ORM populer di Golang. Panduan lengkap dengan contoh kode, konversi model, fields level permission, embedded struct, dan fields tags. Cocok untuk pemula yang ingin memahami GORM lebih dalam.

GORM adalah library ORM (Object-Relational Mapping) yang populer dalam ekosistem Golang. Dengan GORM, kita dapat bekerja dengan database secara lebih mudah menggunakan model yang merepresentasikan tabel dalam database.

Dalam artikel ini, kita akan membahas berbagai aspek penting dalam deklarasi model pada GORM, termasuk:

  • Contoh Deklarasi Model
  • Konversi Model
  • Fields Level Permission
  • Embedded Struct
  • Fields Tags

Artikel ini akan memberikan pemahaman yang jelas dan terstruktur, sehingga cocok bagi programmer pemula yang ingin belajar mengelola database dengan GORM.

Contoh Deklarasi Model

Deklarasi model dalam GORM dilakukan dengan membuat struct yang merepresentasikan tabel di dalam database. Berikut adalah contoh deklarasi model sederhana:

go
 1package main
 2
 3import (
 4    "gorm.io/driver/sqlite"
 5    "gorm.io/gorm"
 6)
 7
 8type User struct {
 9    ID        uint   `gorm:"primaryKey"`
10    Name      string
11    Email     string `gorm:"unique"`
12    Age       int
13}
14
15func main() {
16    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
17    if err != nil {
18        panic("failed to connect database")
19    }
20
21    db.AutoMigrate(&User{})
22}

Kode di atas akan membuat tabel users dalam database SQLite dengan kolom ID, Name, Email, dan Age.

Konversi Model

GORM memungkinkan konversi model ke bentuk lain seperti JSON atau map untuk keperluan tertentu, misalnya API response:

go
 1package main
 2
 3import (
 4    "encoding/json"
 5    "fmt"
 6)
 7
 8func main() {
 9    user := User{
10        ID:    1,
11        Name:  "John Doe",
12        Email: "john@example.com",
13        Age:   30,
14    }
15
16    // Konversi ke JSON
17    userJSON, _ := json.Marshal(user)
18    fmt.Println(string(userJSON))
19}

Kode di atas mengonversi struct User ke JSON, yang umum digunakan dalam API berbasis REST.

Konvensi Nama Kolom

GORM secara otomatis menentukan nama kolom berdasarkan konvensi berikut:

  • Nama kolom default akan menggunakan snake_case.
  • Nama tabel default akan menjadi bentuk jamak dari struct, misalnya User akan menjadi users.
  • Foreign key akan ditambahkan dengan format {ModelName}ID, misalnya UserID.
  • Struct field dengan tipe waktu (time.Time) akan otomatis dianggap sebagai created_at dan updated_at jika tidak diubah.

Misalnya, dalam struct berikut:

go
1type Order struct {
2    ID        uint
3    UserID    uint
4    User      User
5    CreatedAt time.Time
6}

GORM akan membuat tabel orders dengan kolom id, user_id, dan created_at.

Fields Level Permission

Terkadang, kita ingin membatasi akses ke field tertentu, misalnya agar tidak muncul dalam JSON response. Ini bisa dilakukan dengan tag json:"-":

go
1type SecureUser struct {
2    ID        uint   `gorm:"primaryKey"`
3    Name      string
4    Email     string `gorm:"unique" json:"-"`
5    Password  string `json:"-"`
6}

Dengan tag json:"-", field Email dan Password tidak akan muncul saat dikonversi ke JSON.

Embedded Struct

Embedded struct digunakan untuk menghindari duplikasi kode dengan menyertakan struct lain ke dalam model:

go
 1type BaseModel struct {
 2    ID        uint `gorm:"primaryKey"`
 3    CreatedAt time.Time
 4    UpdatedAt time.Time
 5}
 6
 7type Product struct {
 8    BaseModel
 9    Name  string
10    Price float64
11}

Dengan cara ini, Product akan memiliki field ID, CreatedAt, dan UpdatedAt dari BaseModel.

Fields Tags

GORM mendukung berbagai field tags untuk konfigurasi database. Beberapa contoh:

go
1type Employee struct {
2    ID        uint   `gorm:"primaryKey"`
3    Name      string `gorm:"size:100"`
4    Salary    float64 `gorm:"default:0.0"`
5    IsActive  bool   `gorm:"default:true"`
6}
  • size:100 membatasi panjang string menjadi 100 karakter.
  • default:0.0 menetapkan nilai default untuk kolom Salary.
  • default:true membuat nilai IsActive menjadi true secara default.

Kesimpulan

GORM mempermudah pengelolaan database dalam Golang dengan pendekatan berbasis model. Dengan memahami deklarasi model, konversi model, pengaturan permission, embedded struct, dan field tags, kita dapat membangun aplikasi berbasis database dengan lebih efisien.

Jika Anda tertarik untuk belajar lebih dalam tentang Golang, Anda bisa mengunjungi:

IH
Ihsan Arif
Backend engineer & penulis di Santekno. Aktif menulis tentang Go, Laravel, dan arsitektur backend modern.
Follow

💬 Komentar