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