Variadiske funktioner
Modtagelse af et variabelt antal argumenter
Variadiske funktioner er en gratis Go Academy-lektion på CoddyKit. Dette er lektion 3 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 variadisk funktion?
En variadisk funktion accepterer nul eller flere argumenter af en angiven type, som samles i en slice:
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
fmt.Println(sum(1, 2, 3, 4)) // 10Syntaksen ...T
Brug ...T som den sidste parametertype. Inde i funktionen er den en []T:
- Kan kaldes med 0 eller flere argumenter
- Den variadiske parameter skal være den sidste
- Der må kun være én variadisk parameter pr. funktion
Udfoldning af en slice
Send en eksisterende slice til en variadisk funktion ved hjælp af spredningsoperatoren ...:
nums := []int{1, 2, 3, 4, 5}
total := sum(nums...) // spread the slice
fmt.Println(total) // 15fmt.Println er variadisk
Mange funktioner i standardbiblioteket er variadiske. fmt.Println har signaturen func Println(a ...interface{}) (n int, err error) — den accepterer et vilkårligt antal værdier af enhver type.
append er variadisk
Den indbyggede append-funktion er variadisk:
a := []int{1, 2, 3}
b := []int{4, 5, 6}
a = append(a, b...) // append all of b into a
fmt.Println(a) // [1 2 3 4 5 6]Variadiske funktioner med andre parametre
Variadiske parametre kommer sidst. Kombinér faste og variadiske parametre:
func logf(level string, msg string, args ...interface{}) {
fmt.Printf("[%s] "+msg+"\n", append([]interface{}{level}, args...)...)
}Tomt variadisk kald
En variadisk funktion kan kaldes uden argumenter — slicen vil være nil (eller tom):
fmt.Println(sum()) // 0 — nil slice, loop runs 0 timesVariadisk parameter eller slice-parameter
Hvornår skal du bruge en variadisk parameter i stedet for en slice-parameter:
- Variadisk: når kaldere angiver individuelle værdier direkte (f.eks.
sum(1,2,3)) - Slice: når kaldere altid har en forudbygget samling
- Variadiske parametre er mere praktiske på kaldestederne; internt fungerer begge lige godt
Videreførsel til en anden variadisk funktion
Viderefør variadiske argumenter ved hjælp af spredning:
func logError(args ...interface{}) {
log.Println(args...) // forward to log.Println
}Opbygning af indstillingsmønstre
Variadisk ...Option er et populært mønster til valgfri konfiguration (funktionelle indstillinger):
type Option func(*Server)
func NewServer(addr string, opts ...Option) *Server {
s := &Server{addr: addr}
for _, o := range opts {
o(s)
}
return s
}Hurtigt tjek
Hvordan sender du en slice til en variadisk funktion?
Opsamling: variadiske funktioner
Variadiske funktioner gør kaldestederne overskuelige:
...Tsamler de efterfølgende argumenter i en[]Tinde i funktionen- Kald med individuelle værdier, eller udfold en slice med
slice... - Indbyggede funktioner som
appendogfmt.Printlner variadiske - Der må kun være én variadisk parameter, og den skal være den sidste
- Brug mønstret med funktionelle indstillinger til en udtryksfuld API-udformning
Næste emne: defer, anonyme funktioner og closures.
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 “Variadiske funktioner” gratis?
Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “Variadiske funktioner”, 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 “Variadiske funktioner”?
Modtagelse af et variabelt antal argumenter 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 3 af 4.
Hvor lang tid tager lektionen “Variadiske funktioner”?
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
- Grundlæggende funktioner og signaturer
- Flere returværdier
- Variadiske funktioner
- defer, anonyme funktioner og closures