Struct-embedding
Sammensæt structs
Struct-embedding 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.
Sammensæt structer
Go har ingen klassearv. I stedet tilbyder sproget indlejring: Placér én struct i en anden uden et feltnavn for at genbruge dens felter og metoder.
Anonyme felter
Et indlejret felt erklæres kun med sin type, uden navn. Dets medlemmer promoveres til den ydre struct.
package main
import "fmt"
type Engine struct{ Power int }
type Car struct {
Engine
Brand string
}
func main() {
c := Car{Engine: Engine{Power: 150}, Brand: "Coddy"}
fmt.Println(c.Power, c.Brand)
}Adgang til promoverede felter
Du læser direkte fra c.Power, selv om Power tilhører den indlejrede Engine. Det kaldes feltpromovering.
Den fulde sti fungerer stadig
Du kan altid tilgå den indlejrede struct eksplicit via dens typenavn.
package main
import "fmt"
type Engine struct{ Power int }
type Car struct{ Engine }
func main() {
c := Car{Engine{200}}
fmt.Println(c.Engine.Power)
fmt.Println(c.Power)
}Indlejring kontra et navngivet felt
Et navngivet felt (engine Engine) kræver c.engine.Power. Indlejring (Engine) promoverer medlemmer, så du skriver c.Power. Indlejring udtrykker et forhold af typen er en slags.
Initialisering af indlejrede structer
Brug typenavnet som feltnøgle i en sammensat literal.
package main
import "fmt"
type Address struct{ City string }
type User struct {
Address
Name string
}
func main() {
u := User{Address: Address{City: "Istanbul"}, Name: "Mert"}
fmt.Println(u.Name, "in", u.City)
}Flere indlejringer
En struct kan indlejre flere typer og blande deres felter sammen.
package main
import "fmt"
type Timestamps struct{ Created string }
type Author struct{ Name string }
type Post struct {
Timestamps
Author
Title string
}
func main() {
p := Post{Timestamps{"today"}, Author{"Ada"}, "Hello"}
fmt.Println(p.Title, p.Name, p.Created)
}Navnekollisioner
Hvis to indlejrede typer har samme feltnavn, giver den tvetydige reference en kompileringsfejl — du skal kvalificere den med typenavnet for at fjerne tvetydigheden.
Skygning fra den ydre struct
Et felt, der er erklæret på den ydre struct, skygger for et promoveret felt med samme navn. Det ydre felt vinder ved ukvalificeret adgang.
package main
import "fmt"
type Base struct{ ID int }
type Item struct {
Base
ID int
}
func main() {
i := Item{Base{1}, 99}
fmt.Println(i.ID, i.Base.ID)
}Pointerindlejring
Du kan indlejre en pointertype. Medlemmerne promoveres stadig, men du skal initialisere pointeren, ellers risikerer du en nil-dereference.
package main
import "fmt"
type Logger struct{ Prefix string }
type Service struct{ *Logger }
func main() {
s := Service{Logger: &Logger{Prefix: "[svc]"}}
fmt.Println(s.Prefix)
}Hvornår skal du indlejre
- Genbrug almindelige felter (tidsstempler, ID'er)
- Opbyg rigere typer ud fra mindre typer
- Undgå dyb indlejring og lange adgangsstier
Hurtig kontrol
Test din viden om structindlejring.
Opsummering
Du har lært om structindlejring.
- Anonyme felter promoverer medlemmer til den ydre struct
- Tilgå dem via
c.Powerellerc.Engine.Power - Ydre felter skygger for promoverede felter
- Kollisioner kræver eksplicit kvalificering
- Pointerindlejring fungerer også
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 “Struct-embedding” gratis?
Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “Struct-embedding”, 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 “Struct-embedding”?
Sammensæt structs 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 “Struct-embedding”?
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.