Go Academy · Lektion

Variadiske funktioner

Modtagelse af et variabelt antal argumenter

Lektion 3 af 412 trin

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

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

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

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

  • ...T samler de efterfølgende argumenter i en []T inde i funktionen
  • Kald med individuelle værdier, eller udfold en slice med slice...
  • Indbyggede funktioner som append og fmt.Println er 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.

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 “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

  1. Grundlæggende funktioner og signaturer
  2. Flere returværdier
  3. Variadiske funktioner
  4. defer, anonyme funktioner og closures
← Tilbage til Go Academy