Modeller og AutoMigrate
Definér og migrér skemaet
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
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
- Modeller og AutoMigrate
- CRUD-operationer
- Associationer
- Hooks og scopes