Direkt zum Hauptinhalt springen
eLearner.app
Modul 3 · Lektion 3 von 513/50 im Kurs~10 min
Lektionen des Moduls (3/5)

Variadische Funktionen

Variadische Funktionen akzeptieren eine beliebige Anzahl von Argumenten Gleicher Typ. Sie deklarieren sie, indem Sie ... vor den Typ des letzten setzen Parameter. Innerhalb der Funktion ist der Parameter ein Slice.

Erklärung

Go
func sum(nums ...int) int {
    tot := 0
    for _, n := range nums {
        tot += n
    }
    return tot
}

sum()              // 0   (nums = []int{})
sum(1)             // 1
sum(1, 2, 3, 4)    // 10

Nur der letzte Parameter kann variabel sein:

Go
func log(prefix string, values ...any) { ... }   // ok
// func wrong(...int, suffix string) {}            // ERRORE

Eine Scheibe ausbreiten

Wenn Sie bereits über ein Slice verfügen, können Sie es mit an eine Variadic-Funktion übergeben ...:

Go
nums := []int{1, 2, 3}
sum(nums...)         // 6 — espande lo slice nei singoli argomenti

Das „…“ steht nach dem Slice. Ohne Spread würde man einen Typ bekommen Fehler: Sie würden einen []int übergeben, wo die Funktion eine Sequenz erwartet von int.

nums ist ein Slice, kein neuer Container

Innerhalb der Funktion hat nums den Typ []int. Alles Standard-Slice Betriebsarbeit: len(nums), nums[0], range usw.

Klassischer Anwendungsfall: fmt.Println

Alle Print*-Funktionen von fmt sind vielfältig:

Go
// signature (semplificata):
// func Println(a ...any) (n int, err error)

fmt.Println("ciao", 42, true)
args := []any{"a", "b", "c"}
fmt.Println(args...)

Probieren Sie es aus

Übung#go.m3.l3.e1
Versuche: 0Wird geladen…

Definieren Sie sum(nums ...int) int, das die Summe aller Argumente zurückgibt.

Editor wird geladen…
Hinweis anzeigen

Innerhalb der Funktion hat `nums` den Typ `[]int`.

Lösung nach 3 Versuchen verfügbar

Übung#go.m3.l3.e2
Versuche: 0Wird geladen…

Rufen Sie die vorhandene Summenfunktion auf, indem Sie die Slice-Nummern mit Spread `nums...` übergeben.

Editor wird geladen…
Hinweis anzeigen

Der `...` steht NACH dem Slice-Namen.

Lösung nach 3 Versuchen verfügbar

Quiz#go.m3.l3.e3
Bereit

Welcher Typ ist innerhalb von `func f(args ...string)` `args`?

Go
func f(args ...string) {
    _ = args
}
Antwortoptionen

Zusammenfassung

  • ...T als LETZTER Parameter = variadische Funktion; Darin ist []T.
  • Mit einzelnen Werten aufgerufen: Der Compiler sammelt sie in einem Slice. – Mit einem vorhandenen Slice aufgerufen: slice... (Spread, verwendet das Slice wieder).
  • Alle fmt.Print*-Funktionen sind variabel.
  • Nur der letzte Parameter kann variabel sein.