Sobes.tech
Middle — Senior

Poți oferi exemple de soluții arhitecturale care s-au dovedit a fi greșite sau ineficiente și să explici de ce?

sobes.tech AI

Răspuns de la AI

Soluțiile arhitecturale greșite sau ineficiente în Go sunt adesea legate de aplicarea incorectă a principiilor limbajului și a modelelor:

  • Structură monolitică prea mare. Când tot codul este concentrat într-un singur pachet sau fișier, acest lucru complică întreținerea și testarea.
  • Lipsa interfețelor pentru abstracții. În Go, interfețele permit înlocuirea ușoară a implementărilor, dar dacă nu sunt folosite, codul devine rigid.
  • Utilizarea variabilelor globale pentru stare. Acest lucru duce la probleme cu concurența și testarea.
  • Gestionarea incorectă a gorutinelor. De exemplu, lansarea gorutinelor fără control asupra finalizării lor sau fără context, ceea ce duce la scurgeri de resurse.
  • Utilizarea excesivă a canalelor acolo unde funcțiile simple ar fi suficiente. Canalele sunt bune pentru sincronizare, dar utilizarea lor incorectă complică codul.

Un exemplu de soluție proastă — lansarea unei gorutine fără context și control:

func process() {
    go func() {
        // buclă infinită fără posibilitatea de oprire
        for {
            // muncă
        }
    }()
}

Este mai bine să folosiți context pentru anulare:

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