Sobes.tech
Middle — Senior

Kun je voorbeelden geven van architectonische oplossingen die fout of ineffectief bleken te zijn, en uitleggen waarom?

sobes.tech AI

Antwoord van AI

Foute of inefficiënte architectuuroplossingen in Go worden vaak geassocieerd met het verkeerd toepassen van de principes van de taal en patronen:

  • Te grote monolithische structuur. Wanneer alle code geconcentreerd is in één pakket of bestand, wordt onderhoud en testen moeilijker.
  • Ontbreken van interfaces voor abstracties. In Go maken interfaces het gemakkelijk om implementaties te vervangen, maar als ze niet worden gebruikt, wordt de code stijf.
  • Gebruik van globale variabelen voor de staat. Dit leidt tot problemen met gelijktijdigheid en testen.
  • Onjuist beheer van goroutines. Bijvoorbeeld, het starten van goroutines zonder controle over hun beëindiging of zonder context, wat leidt tot resource leaks.
  • Overmatig gebruik van kanalen waar eenvoudige functies voldoende zouden zijn. Kanalen zijn goed voor synchronisatie, maar verkeerd gebruik maakt de code complex.

Een slecht voorbeeld is het starten van een goroutine zonder context of controle:

func process() {
    go func() {
        // oneindige lus zonder mogelijkheid tot stoppen
        for {
            // werk
        }
    }()
}

Het is beter om context te gebruiken voor annulering:

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