Sobes.tech
Middle — Senior

Môžete uviesť príklady architektonických riešení, ktoré sa ukázali byť chybné alebo neefektívne, a vysvetliť prečo?

sobes.tech AI

Odpoveď od AI

Chybné alebo neefektívne architektonické riešenia v Go sú často spojené s nesprávnym použitím princípov jazyka a vzorov:

  • Príliš veľká monolitická štruktúra. Keď je celý kód sústredený v jednom balíku alebo súbore, sťažuje to údržbu a testovanie.
  • Chýbajúce rozhrania pre abstrakcie. V Go umožňujú rozhrania ľahko meniť implementácie, ale ak sa nepoužívajú, kód je tuhý.
  • Použitie globálnych premenných na stav. To vedie k problémom s konkurenciou a testovaním.
  • Nesprávne riadenie gorútin. Napríklad spúšťanie gorútin bez kontroly ich ukončenia alebo bez kontextu, čo spôsobuje úniky zdrojov.
  • Nadmerné používanie kanálov tam, kde stačia jednoduché funkcie. Kanály sú vhodné na synchronizáciu, ale ich nesprávne použitie komplikuje kód.

Príklad zlého riešenia — spustenie gorutiny bez kontextu a kontroly:

func process() {
    go func() {
        // nekonečný cyklus bez možnosti zastavenia
        for {
            // práca
        }
    }()
}

Lepšie je použiť kontext na zrušenie:

func process(ctx context.Context) {
    go func() {
        for {
            select {
            case <-ctx.Done():
                return
            default:
                // práca
            }
        }
    }()
}