Middle — Senior
Můžete uvést příklady architektonických řešení, která se ukázala být chybná nebo neefektivní, a vysvětlit proč?
sobes.tech AI
Odpověď od AI
Chybné nebo neefektivní architektonická řešení v Go jsou často spojena s nesprávným použitím principů jazyka a vzorů:
- Příliš velká monolitická struktura. Když je veškerý kód soustředěn v jednom balíčku nebo souboru, ztěžuje to údržbu a testování.
- Chybějící rozhraní pro abstrakce. V Go umožňují rozhraní snadnou výměnu implementací, ale pokud nejsou používána, kód je rigidní.
- Použití globálních proměnných pro stav. To vede k problémům s konkurencí a testováním.
- Nesprávné řízení gorutin. Například spouštění gorutin bez kontroly jejich ukončení nebo bez kontextu, což způsobuje úniky zdrojů.
- Nadměrné používání kanálů tam, kde stačí jednoduché funkce. Kanály jsou vhodné pro synchronizaci, ale jejich nesprávné použití komplikuje kód.
Příklad špatného řešení — spuštění gorutiny bez kontextu a kontroly:
func process() {
go func() {
// nekonečná smyčka bez možnosti zastavení
for {
// práce
}
}()
}
Lepší je použít kontext pro zrušení:
func process(ctx context.Context) {
go func() {
for {
select {
case <-ctx.Done():
return
default:
// práce
}
}
}()
}