Go Academy · Lektion

Modeller och AutoMigrate

Definiera och migrera schemat

Lektion 1 av 413 steg

Modeller och AutoMigrate är en gratis lektion i Go Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Go Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Go Academy innehåller totalt 4 lektioner.

Vad är GORM

GORM är det populäraste ORM-verktyget för Go. Det mappar Go-strukturer till databastabeller så att du arbetar med objekt i stället för rå SQL. Det stöder PostgreSQL, MySQL, SQLite med flera.

  • Mappning från struktur till tabell
  • Automatiska migreringar
  • Associationer och hooks

Definiera en modell

En modell är en Go-struktur. Varje exporterat fält blir en kolumn. Om du bäddar in gorm.Model läggs fälten ID, CreatedAt, UpdatedAt och DeletedAt till.

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

Fälttaggar

Struct-taggar anpassar kolumner. Med taggen gorm kan du ange storlek, unikhet, index och standardvärden. En tagg skrivs inom backticks efter fälttypen, till exempel 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
}

Namngivningskonventioner

GORM pluraliserar och använder snake_case som standard: en User-struktur mappas till tabellen users, och fältet CreatedAt mappas till created_at. Du kan ändra dessa standarder.

Öppna med GORM

gorm.Open tar en dialector för din databas och returnerar en *gorm.DB. Detta handtag kapslar in anslutningspoolen.

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

AutoMigrate

AutoMigrate skapar tabeller, saknade kolumner och index så att de motsvarar dina strukturer. Det är additivt: kolumner tas inte bort och typer ändras inte på ett destruktivt sätt.

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

Vad AutoMigrate inte gör

AutoMigrate tar aldrig bort oanvända kolumner eller gör typer mindre, för att undvika dataförlust. Vid namnbyten, borttagningar eller typändringar behöver du uttryckliga migreringsverktyg.

En körbar simulering av modellmappning

GORM behöver en riktig databasedrivrutin, så det här körbara exemplet simulerar mappningen av tabeller och kolumner till snake_case som AutoMigrate utför.

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

Fältet DeletedAt

Om din modell bäddar in gorm.Model eller har ett fält av typen gorm.DeletedAt aktiverar GORM soft deletes. Borttagna rader får en tidsstämpel och döljs från frågor i stället för att tas bort.

Anpassade tabellnamn

Implementera en metod med namnet TableName på modellen för att åsidosätta standarden. Det är användbart när ditt schema använder namn som inte följer GORM:s konventioner.

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

Anmärkning om externa paket

GORM och dess dialektorer finns utanför standardbiblioteket och kräver go get gorm.io/gorm samt en drivrutin som gorm.io/driver/postgres. GORM-kodexemplen här är illustrativa.

Snabbtest

Testa dina kunskaper om modeller.

Sammanfattning

Du har lärt dig om modeller och AutoMigrate:

  • Strukturer mappas till tabeller; gorm.Model lägger till ID och tidsstämplar
  • Taggar anger primärnycklar, index och begränsningar
  • Standardnamngivningen är pluraliserad snake_case
  • AutoMigrate är additivt och aldrig destruktivt
  • DeletedAt aktiverar soft deletes
Gratis att börja

Lär dig Go med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”Modeller och AutoMigrate” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Go Academy, inklusive ”Modeller och AutoMigrate”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Go Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Modeller och AutoMigrate”?

Definiera och migrera schemat Ni övar på Go Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Go Academy?

Du behöver inga förkunskaper. Utbildningen i Go Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Modeller och AutoMigrate”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Go Academy-lektionen?

Ja. Varje Go Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Modeller och AutoMigrate
  2. CRUD-operationer
  3. Associationer
  4. Hooks och scopes
← Tillbaka till Go Academy