Go Academy · Lektion

Variadiska funktioner

Ta emot ett variabelt antal argument

Lektion 3 av 412 steg

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)) // 10

Syntaxen ...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)     // 15

fmt.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 times

Variadisk 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:

  • ...T samlar efterföljande argument i en []T inuti funktionen
  • Anropa med enskilda värden eller sprid en slice med slice...
  • Inbyggda funktioner som append och fmt.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.

Gratis att börja

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

  1. Grunderna i funktioner och signaturer
  2. Flera returvärden
  3. Variadiska funktioner
  4. defer, anonyma funktioner och closures
← Tillbaka till Go Academy