Go-Iteratoren: Reinheit und Unreinheit

2025-05-31

Go 1.23 standardisierte Iteratoren, mächtige Funktionen, die auch als Closures verwendet werden können. Die Klassifizierung von Iteratoren in der offiziellen Dokumentation ist jedoch mehrdeutig. Der Autor schlägt eine klarere Unterscheidung zwischen "reinen" und "unreinen" Iteratoren vor: "Reine" Iteratoren starten bei jedem Aufruf neu, während "unreine" Iteratoren möglicherweise einen Zustand beibehalten. Der Artikel untersucht verschiedene Iterator-Typen und die Kompromisse zwischen Leistung und Konsistenz und kommt zu dem Schluss, dass die Go-Iterator-Landschaft sich noch entwickelt und Konventionen und Terminologie weiter verfeinert werden müssen.

Mehr lesen
Entwicklung

Die Performancekosten des Missbrauchs von panic/recover in Go

2025-03-04

Dieser Artikel vergleicht die Performance zwischen der Verwendung von `panic` und `recover` in Go für die Array-Iteration im Vergleich zu einer traditionellen Schleife. Die Ergebnisse zeigen einen signifikanten Performance-Einbruch bei Missbrauch von `panic`/`recover` für den Kontrollfluss in kleineren Datensätzen. Dies wird der Hemmung von Compiler-Optimierungen zugeschrieben, wie z. B. Inlining und Bound-Check-Eliminierung. Obwohl `panic`/`recover` Effizienzgewinne bei der Behandlung interner Fehler bieten können, warnt der Autor vor übermäßiger Verwendung und betont die Wichtigkeit, diese Mechanismen innerhalb eines Pakets zu halten, fern von öffentlichen APIs.

Mehr lesen
Entwicklung