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:
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:
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
Userakan menjadiusers. - Foreign key akan ditambahkan dengan format
{ModelName}ID, misalnyaUserID. - Struct field dengan tipe waktu (
time.Time) akan otomatis dianggap sebagaicreated_atdanupdated_atjika tidak diubah.
Misalnya, dalam struct berikut:
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:"-":
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:
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:
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:100membatasi panjang string menjadi 100 karakter.default:0.0menetapkan nilai default untuk kolomSalary.default:truemembuat nilaiIsActivemenjaditruesecara 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: