Go Academy · Lektion

Definering og brug af structs

Struct-literaler, feltadgang og embedding

Lektion 1 af 413 trin

Definering og brug af structs 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 en struct?

En struct grupperer relaterede felter af forskellige typer under én navngiven type. Det er Gos primære mekanisme til at definere brugerdefinerede datastrukturer — omtrent som en klasse, men uden nedarvning.

Deklaration af en struct

Definér en struct-type med nøgleordet type:

package main
import "fmt"

type Person struct {
    Name string
    Age  int
    City string
}

func main() {
    p := Person{Name: "Alice", Age: 30, City: "London"}
    fmt.Println(p)
}

Struct-litteraler

To former: navngivne felter (anbefales) og positionsbaserede felter (afhænger af rækkefølgen og er skrøbelige):

package main

type Point struct{ X, Y int }

func main() {
    p1 := Point{X: 1, Y: 2} // named — preferred
    p2 := Point{3, 4}        // positional — avoid in non-test code
    _ = p1; _ = p2
}

Adgang til felter

Brug punktnotation til at læse og skrive felter:

package main
import "fmt"

type Car struct{ Brand string; Speed int }

func main() {
    c := Car{Brand: "Tesla", Speed: 200}
    fmt.Println(c.Brand)  // Tesla
    c.Speed = 250
    fmt.Println(c.Speed)  // 250
}

Nulværdien for en struct

En structs nulværdi har alle felter sat til deres respektive nulværdier. Du kan bruge den sikkert uden initialisering:

package main
import "fmt"

type Config struct{ Debug bool; Port int; Host string }

func main() {
    var cfg Config
    fmt.Println(cfg) // {false 0 }
    cfg.Port = 8080
    fmt.Println(cfg) // {false 8080 }
}

Sammenligning af structs

Structs kan sammenlignes med ==, hvis alle deres felter kan sammenlignes:

package main
import "fmt"

type Point struct{ X, Y int }

func main() {
    a := Point{1, 2}
    b := Point{1, 2}
    c := Point{3, 4}
    fmt.Println(a == b) // true
    fmt.Println(a == c) // false
}

Structs er værdityper

Når du tildeler en struct, kopieres alle dens felter. Ændringer i kopien påvirker ikke originalen:

package main
import "fmt"

type Rect struct{ W, H int }

func main() {
    r1 := Rect{10, 20}
    r2 := r1
    r2.W = 99
    fmt.Println(r1) // {10 20}
    fmt.Println(r2) // {99 20}
}

Indlejrede structs

Et struct-felt kan selv være en struct:

package main
import "fmt"

type Address struct{ City, Country string }
type Employee struct {
    Name    string
    Age     int
    Address Address
}

func main() {
    e := Employee{Name: "Bob", Age: 28, Address: Address{"Berlin", "DE"}}
    fmt.Println(e.Address.City) // Berlin
}

Eksporterede og ikke-eksporterede felter

Felter, der begynder med et stort begyndelsesbogstav, er eksporterede (offentlige). Felter med små begyndelsesbogstaver er ikke-eksporterede (kun tilgængelige i pakken):

package main

type config struct {
    host string // unexported
    Port int    // exported
}

func main() {
    c := config{host: "localhost", Port: 8080}
    _ = c
}

Struct-tags

Struct-tags indeholder metadata, f.eks. til JSON-kodning. De er strenglitteraler efter felttypen:

package main

type User struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email,omitempty"`
}

func main() { _ = User{} }

Hurtig kontrol

Hvad er nulværdien for et bool-felt i en struct?

Opsummering: Structs

Vigtigste pointer:

  • Structs grupperer relaterede felter i en navngiven type
  • Brug navngivne feltlitteraler — undgå positionsbaserede litteraler
  • Structs er værdityper — tildeling opretter en kopi
  • Felter, der begynder med stort begyndelsesbogstav, er eksporterede
  • Struct-tags tilføjer metadata til biblioteker som encoding/json

Øvelsesopgave

Definér en Product-struct med felterne Name string, Price float64 og InStock bool. Opret to instanser, sammenlign dem med ==, og udskriv resultatet.

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 “Definering og brug af structs” gratis?

Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “Definering og brug af structs”, 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 “Definering og brug af structs”?

Struct-literaler, feltadgang og embedding 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 “Definering og brug af structs”?

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. Definering og brug af structs
  2. Metoder på structs
  3. Konstruktørmønstre
  4. Anonyme structs og komposition
← Tilbage til Go Academy