0Pricing
Go Academy · Lekcja

Modele i AutoMigrate

Definiuj schemat i przeprowadzaj migracje

Modele i AutoMigrate to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Czym jest GORM

GORM to najpopularniejszy ORM dla języka Go. Odwzorowuje struktury Go na tabele bazy danych, dzięki czemu można pracować na obiektach zamiast na surowym SQL. Obsługuje PostgreSQL, MySQL, SQLite i inne bazy danych.

  • Odwzorowanie struktur na tabele
  • Automatyczne migracje
  • Asocjacje i hooki

Definiowanie modelu

Model jest strukturą Go. Każde eksportowane pole staje się kolumną. Osadzenie gorm.Model dodaje pola ID, CreatedAt, UpdatedAt i DeletedAt.

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

Tagi pól

Tagi struktur umożliwiają dostosowanie kolumn. Za pomocą tagu gorm można ustawić rozmiar, unikalność, indeksy i wartości domyślne. Tag zapisuje się w backtickach po typie pola, na przykład 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
}

Konwencje nazewnictwa

GORM domyślnie tworzy nazwy mnogie i stosuje snake_case: struktura User jest odwzorowywana na tabelę users, a pole CreatedAt na created_at. Można to zmienić.

Otwieranie za pomocą GORM

gorm.Open przyjmuje dialektor dla używanej bazy danych i zwraca obiekt *gorm.DB. Ten obiekt opakowuje pulę połączeń.

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

AutoMigrate

AutoMigrate tworzy tabele, brakujące kolumny i indeksy zgodnie ze strukturami. Działa addytywnie: nie usuwa kolumn ani nie zmienia typów w sposób destrukcyjny.

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

Czego AutoMigrate nie robi

AutoMigrate nigdy nie usuwa nieużywanych kolumn ani nie zmniejsza typów, aby uniknąć utraty danych. Do zmiany nazw, usuwania elementów lub zmiany typów potrzebne są jawne narzędzia do migracji.

Symulacja odwzorowania modelu możliwa do uruchomienia

GORM wymaga rzeczywistego sterownika bazy danych, dlatego ten przykład możliwy do uruchomienia symuluje odwzorowanie tabel i kolumn na snake_case wykonywane przez 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))
    }
}

Pole DeletedAt

Jeśli model osadza gorm.Model lub ma pole gorm.DeletedAt, GORM włącza miękkie usuwanie. Usunięte rekordy otrzymują znacznik czasu i są ukrywane przed zapytaniami zamiast faktycznego usunięcia.

Niestandardowe nazwy tabel

Zaimplementuj metodę TableName w modelu, aby zastąpić nazwę domyślną. Jest to przydatne, gdy schemat używa nazw niezgodnych z konwencjami GORM.

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

Uwaga dotycząca pakietów zewnętrznych

GORM i jego dialekty znajdują się poza biblioteką standardową, dlatego wymagają użycia go get gorm.io/gorm oraz sterownika, takiego jak gorm.io/driver/postgres. Zamieszczone tutaj fragmenty GORM mają charakter poglądowy.

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat modeli.

Podsumowanie

Użytkownik poznał modele i AutoMigrate:

  • Struktury są odwzorowywane na tabele; gorm.Model dodaje ID i znaczniki czasu
  • Tagi ustawiają klucze główne, indeksy i ograniczenia
  • Domyślne nazwy są mnogie i stosują snake_case
  • AutoMigrate działa addytywnie i nigdy nie wykonuje destrukcyjnych zmian
  • DeletedAt włącza miękkie usuwanie

Często zadawane pytania

Czy lekcja „Modele i AutoMigrate” jest bezpłatna?

Tak — pełny tekst „Modele i AutoMigrate” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Modele i AutoMigrate”?

Definiuj schemat i przeprowadzaj migracje Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Modele i AutoMigrate”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Modele i AutoMigrate
  2. Operacje CRUD
  3. Powiązania
  4. Hooki i zakresy
← Powrót do Go Academy