it-praxisportal/courses/go/10_channels_und_datenfluss
Alex Mueller 2571cb8847 feat(ux): responsive kurs-sidebar und kapitel-drawer für alle 13 kurse & web-ide
- Dynamic Sidebar mit window.COURSES_MANIFEST für 13 Kurse (216 Kapitel)
- Kurswechsler Dropdown mit Direktnavigation
- Fortschrittsanzeige mit Solved-Checkmarks (✓) aus localStorage
- Responsive Off-Canvas Drawer mit Floating Action Button (☰ Kapitel) & Backdrop auf Mobile/Tablets
- Web-IDE Topbar Drawer-Button (☰ Kapitel) für unterbrechungsfreien Vollbild-Editor
- Saubere Bereinigung redundanter statischer Legacy-Sidebars
2026-09-12 13:49:46 +02:00
..
aufgabe.go Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00
index.html feat(ux): responsive kurs-sidebar und kapitel-drawer für alle 13 kurse & web-ide 2026-09-12 13:49:46 +02:00
musterloesung.go Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00
README.md Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00
test_aufgabe.go Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00

Go 10: Channels, Pufferung & Daten-Pipelines 📦

Willkommen zu Modul 10 des Go Cloud & Concurrency Lehrpfads!

Channels sind das Herzstück von Gos Concurrency-Philosophie (nach Hoares CSP – Communicating Sequential Processes). In diesem Modul baust du datengetriebene Streaming-Pipelines zur Verarbeitung strukturierter Server-Logs.


💡 1. Das Wichtigste in Kürze

Channel-Typen

  • Ungepuffert (make(chan T)): Senden und Empfangen finden zeitgleich statt (Handshake / Rendezvous). Blockiert, bis die Gegenseite bereit ist.
  • Gepuffert (make(chan T, n)): Fasst bis zu n Elemente in einer Warteschlange. Senden blockiert erst, wenn der Puffer voll ist.

Channel-Direktionen

  • chan T: Bidirektionaler Kanal (kann senden und empfangen).
  • chan<- T: Send-only Kanal (darf nur befüllt werden: ch <- item).
  • <-chan T: Receive-only Kanal (darf nur ausgelesen werden: item := <-ch).

Sauberes Schließen und Iterieren

// Producer:
func Generator() <-chan int {
    out := make(chan int, 10)
    go func() {
        defer close(out) // Wichtig: Immer schließen, wenn keine Daten mehr folgen!
        for i := 1; i <= 5; i++ {
            out <- i
        }
    }()
    return out
}

// Consumer:
ch := Generator()
for val := range ch { // for..range bricht automatisch ab, sobald der Channel geschlossen ist
    fmt.Println(val)
}

🎯 Aufgaben in aufgabe.go

  1. TODO 1 (LogRecord): Definiere das Struct LogRecord mit ID int, Level string ("INFO", "WARN", "ERROR"), Message string und Source string.
  2. TODO 2 (ProduceLogs): Erstelle einen Generator ProduceLogs(records []LogRecord) <-chan LogRecord, der alle Records in einer Hintergrund-Goroutine sendet und den Kanal am Ende schließt.
  3. TODO 3 (FilterLogs): Schreibe die Pipeline-Stufe FilterLogs(in <-chan LogRecord, targetLevel string) <-chan LogRecord, die nur Einträge mit Level == targetLevel an den Ausgangskanal weiterleitet.
  4. TODO 4 (CountLogsByLevel): Schreibe die Aggregator-Funktion CountLogsByLevel(in <-chan LogRecord) map[string]int, die alle Events liest und ein Dictionary mit den Vorkommen pro Log-Level zurückgibt.

🧪 Tests ausführen

go test -v ./...