0Pricing
Go Academy · Pelajaran

Model dan AutoMigrate

Definisikan dan migrasikan skema

Model dan AutoMigrate adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Apa Itu GORM

GORM adalah pemetaan objek-relasional paling populer untuk Go. GORM memetakan struktur Go ke tabel basis data sehingga Anda bekerja dengan objek, bukan SQL mentah. GORM mendukung PostgreSQL, MySQL, SQLite, dan lainnya.

  • Pemetaan struktur ke tabel
  • Migrasi otomatis
  • Asosiasi dan pengait

Mendefinisikan Model

Model adalah struktur Go. Setiap bidang yang diekspor menjadi kolom. Menyisipkan gorm.Model menambahkan bidang ID, CreatedAt, UpdatedAt, dan DeletedAt.

type User struct {
    gorm.Model
    Name  string
    Email string
    Age   int
}

Penanda Bidang

Penanda struktur menyesuaikan kolom. Anda dapat mengatur ukuran, keunikan, indeks, dan nilai bawaan dengan penanda gorm. Penanda ditulis di antara tanda aksen terbalik setelah tipe bidang, misalnya gorm:"uniqueIndex;size:255".

type User struct {
    // ID    uint    tag: gorm:"primaryKey"
    // Email string  tag: gorm:"uniqueIndex;size:255"
    // Name  string  tag: gorm:"not null"
    ID    uint
    Email string
    Name  string
}

Konvensi Penamaan

GORM secara bawaan mengubah nama menjadi bentuk jamak dan snake_case: struktur User dipetakan ke tabel users, dan bidang CreatedAt dipetakan ke created_at. Anda dapat mengganti aturan ini.

Membuka dengan GORM

gorm.Open menerima dialektor untuk basis data Anda dan mengembalikan *gorm.DB. Objek ini membungkus kumpulan koneksi.

db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
    log.Fatal(err)
}

AutoMigrate

AutoMigrate membuat tabel, kolom yang belum ada, dan indeks agar sesuai dengan struktur Anda. Proses ini hanya menambahkan: proses ini tidak akan menghapus kolom atau mengubah tipe secara merusak.

db.AutoMigrate(&User{}, &Product{})

Hal yang Tidak Dilakukan AutoMigrate

AutoMigrate tidak pernah menghapus kolom yang tidak digunakan atau memperkecil tipe, untuk mencegah kehilangan data. Untuk mengganti nama, menghapus, atau mengubah tipe, Anda memerlukan alat migrasi eksplisit.

Simulasi Pemetaan Model yang Dapat Dijalankan

GORM memerlukan pengandar basis data nyata, jadi contoh yang dapat dijalankan ini menyimulasikan pemetaan tabel dan kolom snake_case yang dilakukan AutoMigrate.

package main

import (
    "fmt"
    "strings"
)

func toSnake(s string) string {
    var b strings.Builder
    for i, r := range s {
        if i > 0 && r >= 65 && r <= 90 {
            b.WriteByte(95)
        }
        if r >= 65 && r <= 90 {
            r = r + 32
        }
        b.WriteRune(r)
    }
    return b.String()
}

func main() {
    model := "User"
    fields := []string{"ID", "Name", "CreatedAt"}
    fmt.Println("table:", toSnake(model)+"s")
    for _, f := range fields {
        fmt.Println("column:", toSnake(f))
    }
}

Bidang DeletedAt

Jika model Anda menyisipkan gorm.Model atau memiliki bidang gorm.DeletedAt, GORM mengaktifkan penghapusan lunak. Baris yang dihapus mendapatkan cap waktu dan disembunyikan dari kueri, bukan dihapus.

Nama Tabel Khusus

Implementasikan metode TableName pada model untuk mengganti nama bawaan. Ini berguna jika skema Anda menggunakan nama yang tidak sesuai dengan konvensi GORM.

func (User) TableName() string {
    return "app_users"
}

Catatan Paket Eksternal

GORM dan dialektornya berada di luar pustaka standar, sehingga memerlukan go get gorm.io/gorm dan pengandar seperti gorm.io/driver/postgres. Potongan kode GORM di sini hanya sebagai ilustrasi.

Pemeriksaan Singkat

Uji pengetahuan Anda tentang model.

Ringkasan

Anda telah mempelajari model dan AutoMigrate:

  • Struktur dipetakan ke tabel; gorm.Model menambahkan ID dan cap waktu
  • Penanda mengatur kunci utama, indeks, dan batasan
  • Penamaan bawaan menggunakan bentuk jamak dan snake_case
  • AutoMigrate hanya menambahkan dan tidak pernah melakukan perubahan yang merusak
  • DeletedAt mengaktifkan penghapusan lunak

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Model dan AutoMigrate” gratis?

Ya — teks lengkap “Model dan AutoMigrate” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Model dan AutoMigrate”?

Definisikan dan migrasikan skema Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Model dan AutoMigrate” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Model dan AutoMigrate
  2. Operasi CRUD
  3. Asosiasi
  4. Hook dan Scope
← Kembali ke Go Academy