Sobes.tech
Middle — Senior

Kas saaksite anda arhitektuursete lahenduste näiteid, mis osutusid valedeks või ebaefektiivseteks, ning selgitada, miks?

sobes.tech AI

Vastus AI-lt

Vead või ebatõhusad arhitektuurilised lahendused Go-s on sageli seotud keele põhimõtete ja mustrite vale rakendamisega:

  • Liiga suur monoliitne struktuur. Kui kogu kood on keskendunud ühte paketti või faili, muudab see hoolduse ja testimise keerulisemaks.
  • Puuduvad liidesed abstraktsioonide jaoks. Go-s võimaldavad liidesed hõlpsasti asendada teostusi, kuid kui neid ei kasutata, muutub kood jäigaks.
  • Globaalsete muutujate kasutamine oleku jaoks. See põhjustab konkurentsi ja testimise probleeme.
  • Vale gorutiinide haldamine. Näiteks gorutiinide käivitamine ilma nende lõpetamise kontrollita või ilma kontekstita, mis viib ressursside lekkimiseni.
  • Liigne kanalite kasutamine seal, kus piisaks lihtsatest funktsioonidest. Kanalid on head sünkroniseerimiseks, kuid nende vale kasutamine keerulisemaks koodiks.

Halb näide — gorutiinide käivitamine ilma konteksti ja kontrollita:

func process() {
    go func() {
        // lõpmatu tsükkel ilma võimaluseta peatada
        for {
            // töö
        }
    }()
}

Parema lähenemisena on soovitatav kasutada konteksti tühistamiseks:

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