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
}
}
}()
}