Grundlagen
Alle ansehen- 01 Was ist Go? Statisch typisiert, kompiliert, nebenläufig — pragmatisch im Kern
- 02 Setup und Installation Go-Toolchain auf jedem System installieren
- 03 Erstes Programm Vom main.go zum lauffähigen Binary
- 04 Projektstruktur und go.mod Module, Layout-Konventionen und go.mod im Detail
- 05 Pakete und Imports Wie Go Code in Packages organisiert
- 06 Naming Conventions Wie Go-Code idiomatisch benannt wird
Datentypen
Alle ansehen- 01 Array Arrays in Go verstehen und sicher einsetzen
- 02 Bool Bool in Go verstehen und sicher einsetzen
- 03 Float Fließkommazahlen in Go sicher verstehen und verwenden
- 04 Int Integer-Typen in Go verstehen und sicher einsetzen
- 05 Rune Unicode-Codepoints in Go als rune verstehen und nutzen
- 06 Slice Slices in Go verstehen, sicher erweitern und kopieren
- 07 String Strings in Go verstehen und sicher verwenden
- 08 Map Hashmap-Datentyp in Go sicher verwenden
- 09 Byte Der Byte-Datentyp und []byte in Go
- 10 Complex Komplexe Zahlen als Sprach-Typ in Go
- 11 Type Conversions vs. Type Assertions Compile-Time-Cast vs. Runtime-Interface-Auspacken
Variablen & Konstanten
Alle ansehen- 01 var vs. := (Walrus) Welche der beiden Deklarationsformen wann die richtige ist
- 02 Zero Values Was eine deklarierte Variable ohne Initialwert enthält
- 03 Type Inference Wie Go den Typ aus dem Initialwert ableitet
- 04 const und iota Konstanten in Go und der iota-Zähler für Enum-artige Werte
- 05 Scoping-Regeln Wo eine Variable, Konstante oder Funktion sichtbar ist
Kontrollstrukturen
Alle ansehen- 01 Kontrollstrukturen Ablaufsteuerung in Go verstehen und idiomatisch einsetzen
- 02 if Bedingungen mit lokalem Init-Statement schreiben
- 03 for Die einzige Schleife in Go — und ihre drei Formen
- 04 switch Mehrweg-Verzweigung und Typ-Diskriminierung in einem
- 05 defer Verzögerte Aufrufe für Cleanup, mit Eigenheiten
- 06 break, continue, goto Schleifen und switch gezielt verlassen oder überspringen
Funktionen
Alle ansehen- 01 Funktionen Funktionen in Go von Grundlagen bis First-Class-Patterns
- 02 Multiple Returns Mehrere Werte aus einer Funktion zurückgeben — idiomatisch und sicher
- 03 Variadic Functions Funktionen mit variabler Anzahl an Argumenten
- 04 Closures Funktionen, die ihren Umgebungsscope einfangen
- 05 First-Class Functions Funktionen als Werte: speichern, übergeben, zurückgeben
- 06 Rekursion Funktionen, die sich selbst aufrufen — sicher und effizient
Pointer
Alle ansehen- 01 Pointer Pointer in Go verstehen und sicher einsetzen
- 02 Pointer-Grundlagen Was ein Pointer in Go ist und wie er sich von C/Java unterscheidet
- 03 & und * Die zwei Operatoren, die Pointer in Go möglich machen
- 04 Pointer vs. Wert Wann du einen Pointer nutzt und wann den Wert direkt
- 05 nil-Pointer Der Zero Value eines Pointers — und was beim Zugriff schiefgeht
- 06 Pointer als Parameter Funktionen, die ihre Argumente verändern oder große Werte effizient teilen
Structs & Methoden
Alle ansehen- 01 Structs Structs in Go verstehen, modellieren und idiomatisch einsetzen
- 02 Embedding Composition über Embedding statt Vererbung — Felder und Methoden idiomatisch teilen
- 03 Methoden auf Structs Methoden definieren, Receiver verstehen, Methodenwerte und -ausdrücke nutzen
- 04 Value- vs. Pointer-Receiver Wann Pointer-Receiver, wann Value-Receiver — die idiomatische Faustregel
- 05 Struct-Tags Metadaten an Feldern für JSON, Validierung, Datenbank-Mapping & mehr
- 06 Anonyme Structs Struct-Typen ohne Namen — wann sie elegant sind und wann nicht
Interfaces
Alle ansehen- 01 Interfaces Interfaces in Go verstehen und idiomatisch einsetzen
- 02 Implizite Implementierung Wer die Methoden hat, erfüllt das Interface — ohne Deklaration
- 03 Empty Interface (any) interface{} und any — der Universalcontainer und seine Kosten
- 04 Type Assertion und Type Switch Aus einem Interface den konkreten Typ herausholen — sicher mit comma-ok
- 05 Interface Satisfaction Wann implementiert ein Typ wirklich ein Interface — die formale Regel
- 06 Accept interfaces, return structs Funktionen nehmen Interfaces, geben konkrete Typen zurück — Gos API-Idiom
- 07 Nil-Interface-Fallen Der berühmteste Go-Stolperer: nil-Pointer in Interface ist NICHT nil
Error-Handling
Alle ansehen- 01 error als Wert Fehler sind Werte, keine Exceptions — Gos einfachstes und striktestes Konzept
- 02 Sentinel Errors und eigene Error-Typen Wiederverwendbare Fehler-Werte und strukturierte Fehler-Typen für Programm-Logik
- 03 errors.Is, As, Join & Wrapping Fehler einpacken, durchsuchen, sammeln — die moderne Go-Error-API
- 04 panic und recover Programm-Abbruch und kontrolliertes Auffangen — nur für echte Ausnahmen
- 05 defer + recover-Pattern Panics an Modul-Grenzen sauber in Errors verwandeln
Generics
Alle ansehen- 01 Type Parameters Generische Funktionen und Typen mit Type-Parametern — Gos Schritt zu echter Polymorphie
- 02 Constraints und Type Sets Type-Parameter einschränken — von any bis cmp.Ordered und eigene Constraints
- 03 Wann Generics, wann Interface Die Designfrage: Type-Parameter oder Interface? Hier ist die offizielle Faustregel
- 04 Praktische Beispiele Die wichtigsten Generic-Patterns mit vollständigen Implementierungen
Goroutines & Channels
Alle ansehen- 01 Goroutines Goroutines in Go starten, synchronisieren und verstehen
- 02 Channels Channels in Go für sichere Goroutine-Kommunikation verstehen
- 03 select-Statement Auf mehrere Channels gleichzeitig warten — der Multiplexer für Goroutinen
- 04 close und range über Channel Wer schließt, wann, und wer iteriert? Die saubere Lifecycle-Regel für Channels
- 05 Common Patterns: Pipeline, Worker-Pool, Fan-Out/Fan-In Die idiomatischen Concurrency-Patterns aus dem Pipelines-Blog mit lauffähigen Beispielen
- 06 Race Conditions und der Race Detector Was Data Races sind, warum sie tückisch sind und wie -race sie zuverlässig findet
Sync & Context
Alle ansehen- 01 sync.Mutex und sync.RWMutex Mutexe richtig einsetzen: Granularität, Embedding, RWMutex und die häufigsten Fallen
- 02 sync.WaitGroup und sync.Once Auf n Goroutines warten und Initialisierung genau einmal ausführen — robust
- 03 sync/atomic — Lock-freie Primitive Atomare Operationen direkt von der CPU — schneller als Mutex, mit harten Regeln
- 04 context.Context — Grundlagen und Cancellation Der Standard-Cancellation-Mechanismus in Go — von Background bis zum verschachtelten Context-Tree
- 05 Context: Deadlines und Timeouts Wann ist „lange genug" zu lang — Deadlines und Timeouts mit context
- 06 Context-Verträge und Best Practices Wie ctx zu Funktionssignaturen kommt, wann context.Value, wann nicht — die Regeln
Die Go-Standardbibliothek
Alle ansehen- 01 Das fmt-Paket — Formatierte I/O Übersicht über alle Funktionen, Typen und Konzepte des fmt-Pakets
- 02 Das strings-Paket — String-Manipulation Such-, Teil-, Trim-, Replace- und Builder-Funktionen für String-Verarbeitung
- 03 Das strconv-Paket — String-Zahl-Konvertierung Strings in Zahlen wandeln und zurück — spezialisierte Parser und Formatierer für int, float, bool und Go-Literale
- 04 Das bytes-Paket — Byte-Slice-Manipulation Das Spiegelbild von strings, aber für []byte — plus bytes.Buffer und bytes.Reader