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:
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type User struct {
ID uint `gorm:"primaryKey"`
Name string
Email string `gorm:"unique"`
Age int
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
db.AutoMigrate(&User{})
}
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:
package main
import (
"encoding/json"
"fmt"
)
func main() {
user := User{
ID: 1,
Name: "John Doe",
Email: "john@example.com",
Age: 30,
}
// Konversi ke JSON
userJSON, _ := json.Marshal(user)
fmt.Println(string(userJSON))
}
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 menjadiusers
. - Foreign key akan ditambahkan dengan format
{ModelName}ID
, misalnyaUserID
. - Struct field dengan tipe waktu (
time.Time
) akan otomatis dianggap sebagaicreated_at
danupdated_at
jika tidak diubah.
Misalnya, dalam struct berikut:
type Order struct {
ID uint
UserID uint
User User
CreatedAt time.Time
}
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:"-"
:
type SecureUser struct {
ID uint `gorm:"primaryKey"`
Name string
Email string `gorm:"unique" json:"-"`
Password string `json:"-"`
}
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:
type BaseModel struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
}
type Product struct {
BaseModel
Name string
Price float64
}
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:
type Employee struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"size:100"`
Salary float64 `gorm:"default:0.0"`
IsActive bool `gorm:"default:true"`
}
size:100
membatasi panjang string menjadi 100 karakter.default:0.0
menetapkan nilai default untuk kolomSalary
.default:true
membuat nilaiIsActive
menjaditrue
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: