Go Academy · Lektion

Modeller og AutoMigrate

Definér og migrér skemaet

Lektion 1 af 413 trin

Modeller og AutoMigrate er en gratis Go Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Go Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad er GORM

GORM er den mest populære ORM til Go. Den knytter Go-strukturer til databasetabeller, så du arbejder med objekter i stedet for rå SQL. Den understøtter PostgreSQL, MySQL, SQLite og meget mere.

  • Tilknytning fra struktur til tabel
  • Automatiske migreringer
  • Relationer og livscykluskroge

Definition af en model

En model er en Go-struktur. Hvert eksporterede felt bliver til en kolonne. Ved at indlejre gorm.Model tilføjes felterne ID, CreatedAt, UpdatedAt og DeletedAt.

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

Felt-tags

Struktur-tags tilpasser kolonner. Du kan angive størrelse, entydighed, indeks og standardværdier med gorm-tagget. Et tag skrives mellem backtick-tegn efter felttypen, for eksempel 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
}

Navngivningskonventioner

GORM gør som standard navne til flertal og bruger snake_case: en User-struktur knyttes til tabellen users, og feltet CreatedAt knyttes til created_at. Du kan tilsidesætte dette.

Åbn med GORM

gorm.Open tager en database-dialektor og returnerer en *gorm.DB. Dette forbindelsesobjekt omslutter forbindelsespoolen.

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

AutoMigrate

AutoMigrate opretter tabeller, manglende kolonner og indeks, så de passer til dine strukturer. Den er additiv: den sletter ikke kolonner og ændrer ikke typer på en destruktiv måde.

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

Det gør AutoMigrate ikke

AutoMigrate sletter aldrig ubrugte kolonner og formindsker ikke typer for at undgå datatab. Ved omdøbninger, sletninger eller typeændringer har du brug for et eksplicit migreringsværktøj.

En kørbar simulering af modelkortlægning

GORM kræver en rigtig database-driver, så dette kørbare eksempel simulerer den snake_case-kortlægning af tabeller og kolonner, som AutoMigrate udfører.

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))
    }
}

Feltet DeletedAt

Hvis din model indlejrer gorm.Model eller har et gorm.DeletedAt-felt, aktiverer GORM logisk sletning. Slettede rækker får et tidsstempel og skjules fra forespørgsler i stedet for at blive fjernet.

Brugerdefinerede tabelnavne

Implementér en TableName-metode på modellen for at tilsidesætte standarden. Det er nyttigt, når dit databaseskema bruger navne, der ikke følger GORMs konventioner.

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

Bemærkning om eksterne pakker

GORM og dens dialektorer ligger uden for standardbiblioteket, så du skal bruge go get gorm.io/gorm og en driver som gorm.io/driver/postgres. GORM-kodestykkerne her er illustrative.

Hurtig kontrol

Afprøv din viden om modeller.

Opsummering

Du har lært om modeller og AutoMigrate:

  • Strukturer knyttes til tabeller; gorm.Model tilføjer ID og tidsstempler
  • Tags angiver primærnøgler, indeks og begrænsninger
  • Standardnavngivningen bruger flertalsformer og snake_case
  • AutoMigrate er additiv og aldrig destruktiv
  • DeletedAt aktiverer logisk sletning
Gratis at komme i gang

Lær Go med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Modeller og AutoMigrate” gratis?

Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “Modeller og AutoMigrate”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Modeller og AutoMigrate”?

Definér og migrér skemaet Du øver dig i Go Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Go Academy?

Der kræves ingen tidligere erfaring. Go Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Modeller og AutoMigrate”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Go Academy-lektion?

Ja. Alle Go Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Modeller og AutoMigrate
  2. CRUD-operationer
  3. Associationer
  4. Hooks og scopes
← Tilbage til Go Academy