⚡ Go Funktionen

Go 04: Funktionen, Multiple Returns & Variadische Parameter

Erkunde First-Class Functions in Go: Mehrfache Rückgabewerte als Error-Standard, benannte Rückgabewerte, variadische Parameter (...) und Closures.

🎯 1. Mehrfache Rückgabewerte (Multiple Return Values)

In Go können Funktionen mehrere Werte zurückgeben. Das ist die fundamentale Grundlage für das Go-Fehlerbehandlungsmodell:

import "errors"

func SichereDivision(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("Division durch Null nicht erlaubt")
    }
    return a / b, nil
}

// Aufruf mit Entpacken:
ergebnis, err := SichereDivision(10, 2)
if err != nil {
    fmt.Println("Fehler:", err)
    return
}
fmt.Println("Ergebnis:", ergebnis)
🏢 Didaktische Analogie: Der Paketbote mit Quittung

In vielen Sprachen wirft eine Funktion im Fehlerfall ein Paket über den Zaun (Exception), und du musst hoffen, dass jemand einen Fanghandschuh (Try-Catch) anhat. In Go übergibt dir der Bote immer zwei Dinge direkt in die Hand: Das Paket (Ergebnis) und die unterschriebene Quittung (Error). Ist die Quittung nil, ist alles perfekt!

📋 2. Benannte Rückgabewerte & Variadische Parameter

Rückgabewerte können im Funktionskopf benannt werden. Sie werden wie lokale Variablen initialisiert:

// Benannte Rückgabewerte dokumentieren den Zweck sofort:
func BerechneStatistik(werte []int) (min int, max int, summe int, schnitt float64) {
    if len(werte) == 0 {
        return 0, 0, 0, 0.0
    }
    // min, max, summe werden berechnet...
    return min, max, summe, schnitt
}

// Variadische Funktion: Akzeptiert beliebig viele Argumente
func LoggeEreignisse(level string, nachrichten ...string) {
    for _, msg := range nachrichten {
        fmt.Printf("[%s] %s\n", level, msg)
    }
}

🔒 3. Anonyme Funktionen & Closures

Funktionen sind in Go Werte (First-Class Citizens). Sie können Variablen aus ihrem äußeren Gültigkeitsbereich einschließen (Closure):

func ErstelleZaehler(start int) func() int {
    zaehler := start
    return func() int {
        zaehler++
        return zaehler
    }
}

c1 := ErstelleZaehler(10)
fmt.Println(c1()) // 11
fmt.Println(c1()) // 12

🎯 Aufgaben & Checkliste in aufgabe.go

💻 In Web-IDE öffnen → Weiter zu Go 05 (Lehrpfad 2) →