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