Sobes.tech
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
            }
        }
    }()
}