Sobes.tech
Middle — Senior

Tudna példákat mondani olyan építészeti megoldásokra, amelyek hibásak vagy hatékonytalanok voltak, és elmagyarázni, miért?

sobes.tech MI

Válasz az MI-től

A Go-ban a hibás vagy nem hatékony architektúra megoldások gyakran a nyelv és minták helytelen alkalmazásához kötődnek:

  • Túl nagy monolitikus szerkezet. Amikor az összes kód egy csomagban vagy fájlban van összpontosítva, ez megnehezíti a karbantartást és a tesztelést.
  • Interfészek hiánya az absztrakciókhoz. Go-ban az interfészek lehetővé teszik az implementációk könnyű cseréjét, de ha nem használják őket, a kód merevvé válik.
  • Globális változók használata az állapothoz. Ez verseny- és tesztelési problémákhoz vezet.
  • A goroutine-ok helytelen kezelése. Például, goroutine-ok indítása anélkül, hogy ellenőriznénk azok befejezését vagy kontextus nélkül, ami erőforrás-szivárgáshoz vezet.
  • Túlzott csatorna használat, ahol egyszerű funkciók is elegendőek lennének. A csatornák jók szinkronizációra, de helytelen alkalmazásuk bonyolítja a kódot.

Egy rossz példa — goroutine indítása kontextus és ellenőrzés nélkül:

func process() {
    go func() {
        // végtelen ciklus, leállítás lehetősége nélkül
        for {
            // munka
        }
    }()
}

Jobb, ha a kontextust használjuk a megszakításhoz:

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