Middle — Senior
Kannst du Beispiele für architektonische Lösungen nennen, die sich als fehlerhaft oder ineffizient erwiesen haben, und erklären, warum?
sobes.tech KI
Antwort von AI
Fehlerhafte oder ineffiziente Architekturentscheidungen in Go sind oft auf eine falsche Anwendung der Sprachprinzipien und Muster zurückzuführen:
- Zu große monolithische Strukturen. Wenn der gesamte Code in einem Paket oder einer Datei konzentriert ist, erschwert dies Wartung und Tests.
- Fehlende Schnittstellen für Abstraktionen. In Go ermöglichen Schnittstellen einen einfachen Austausch von Implementierungen, aber wenn sie nicht verwendet werden, wird der Code starr.
- Verwendung globaler Variablen für den Zustand. Dies führt zu Problemen bei Konkurrenz und Tests.
- Falsches Management von Goroutines. Zum Beispiel das Starten von Goroutines ohne Kontrolle über deren Beendigung oder ohne Kontext, was zu Ressourcenlecks führt.
- Übermäßiger Einsatz von Kanälen, wo einfache Funktionen ausreichen würden. Kanäle sind gut für Synchronisation, aber ihre falsche Anwendung erschwert den Code.
Ein Beispiel für eine schlechte Lösung ist das Starten einer Goroutine ohne Kontext und Kontrolle:
func process() {
go func() {
// Endlosschleife ohne Möglichkeit zum Anhalten
for {
// Arbeit
}
}()
}
Besser ist es, den Kontext zur Abbruchsteuerung zu verwenden:
func process(ctx context.Context) {
go func() {
for {
select {
case <-ctx.Done():
return
default:
// Arbeit
}
}
}()
}