Middle — Senior
Можете ли да дате пример архитектонских решења која су се показала као грешна или неефикасна, и објаснити зашто?
sobes.tech АИ
Одговор од АИ
Neispravna ili neefikasna arhitektonska rešenja u Go često su povezana sa pogrešnom primenom principa jezika i obrazaca:
- Prevelika monolitna struktura. Kada je sav kod koncentrisan u jednom paketu ili fajlu, to otežava održavanje i testiranje.
- Nedostatak interfejsa za apstrakcije. U Go-u, interfejsi omogućavaju lako zamenjivanje implementacija, ali ako se ne koriste, kod postaje krut.
- Korišćenje globalnih promenljivih za stanje. To dovodi do problema sa konkurentnošću i testiranjem.
- Pogrešno upravljanje gorutinama. Na primer, pokretanje gorutina bez kontrole njihovog završetka ili bez konteksta, što dovodi do curenja resursa.
- Prekomerna upotreba kanala tamo gde su dovoljne jednostavne funkcije. Kanali su dobri za sinhronizaciju, ali njihova pogrešna primena komplikuje kod.
Primer lošeg rešenja — pokretanje gorutine bez konteksta i kontrole:
func process() {
go func() {
// beskonačna petlja bez mogućnosti zaustavljanja
for {
// rad
}
}()
}
Bolje je koristiti kontekst za otkazivanje:
func process(ctx context.Context) {
go func() {
for {
select {
case <-ctx.Done():
return
default:
// rad
}
}
}()
}