Variadiska funktioner
Ta emot ett variabelt antal argument
Variadiska funktioner är en gratis lektion i Go Academy på CoddyKit. Detta är lektion 3 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 en variadisk funktion
En variadisk funktion accepterar noll eller fler argument av en angiven typ, som samlas 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)) // 10Syntaxen ...T
Använd ...T som den sista parametertypen. Inuti funktionen är den en []T:
- Kan anropas med 0 eller fler argument
- Den variadiska parametern måste vara sist
- Endast en variadisk parameter är tillåten per funktion
Sprida en slice
Skicka en befintlig slice till en variadisk funktion med spridningsoperatorn ...:
nums := []int{1, 2, 3, 4, 5}
total := sum(nums...) // spread the slice
fmt.Println(total) // 15fmt.Println är variadisk
Många funktioner i standardbiblioteket är variadiska. fmt.Println har signaturen func Println(a ...interface{}) (n int, err error) – den accepterar valfritt antal värden av valfria typer.
append är variadisk
Den inbyggda funktionen append är 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]Variadiska funktioner med andra parametrar
Variadiska parametrar kommer sist. Kombinera fasta och variadiska parametrar:
func logf(level string, msg string, args ...interface{}) {
fmt.Printf("[%s] "+msg+"\n", append([]interface{}{level}, args...)...)
}Tomt variadiskt anrop
En variadisk funktion kan anropas utan argument – slicen blir nil (eller tom):
fmt.Println(sum()) // 0 — nil slice, loop runs 0 timesVariadisk parameter eller slice-parameter
När ska ni använda en variadisk parameter i stället för en slice-parameter:
- Variadisk: när anroparna skickar enskilda värden direkt (till exempel
sum(1,2,3)) - Slice: när anroparna alltid har en färdig samling
- Variadiska parametrar är smidigare vid anrop; internt fungerar båda lika bra
Skicka en variadisk parameter till en annan variadisk funktion
Vidarebefordra variadiska argument med spridning:
func logError(args ...interface{}) {
log.Println(args...) // forward to log.Println
}Bygga option-mönster
Variadiska ...Option är ett populärt mönster för valfri konfiguration (funktionella optioner):
type Option func(*Server)
func NewServer(addr string, opts ...Option) *Server {
s := &Server{addr: addr}
for _, o := range opts {
o(s)
}
return s
}Snabb kontroll
Hur skickar ni en slice till en variadisk funktion?
Sammanfattning: variadiska funktioner
Variadiska funktioner gör anropsplatserna tydliga:
...Tsamlar efterföljande argument i en[]Tinuti funktionen- Anropa med enskilda värden eller sprid en slice med
slice... - Inbyggda funktioner som
appendochfmt.Printlnär variadiska - Endast en variadisk parameter är tillåten, och den måste vara sist
- Använd mönstret med funktionella optioner för uttrycksfull API-design
Nästa ämne: defer, anonyma funktioner och closures.
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 ”Variadiska funktioner” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Go Academy, inklusive ”Variadiska funktioner”, 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 ”Variadiska funktioner”?
Ta emot ett variabelt antal argument 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 3 av 4.
Hur lång tid tar lektionen ”Variadiska funktioner”?
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
- Grunderna i funktioner och signaturer
- Flera returvärden
- Variadiska funktioner
- defer, anonyma funktioner och closures