Middle — Senior
Pouvez-vous donner des exemples de solutions architecturales qui se sont avérées erronées ou inefficaces, et expliquer pourquoi?
sobes.tech IA
Réponse de l'IA
Les solutions architecturales erronées ou inefficaces en Go sont souvent liées à une mauvaise application des principes du langage et des modèles :
- Structure monolithique trop grande. Lorsque tout le code est concentré dans un seul paquet ou fichier, cela complique la maintenance et les tests.
- Absence d'interfaces pour les abstractions. En Go, les interfaces permettent de remplacer facilement les implémentations, mais si elles ne sont pas utilisées, le code devient rigide.
- Utilisation de variables globales pour l'état. Cela entraîne des problèmes de concurrence et de test.
- Gestion incorrecte des goroutines. Par exemple, lancer des goroutines sans contrôle de leur terminaison ou sans contexte, ce qui conduit à des fuites de ressources.
- Utilisation excessive de canaux là où des fonctions simples suffiraient. Les canaux sont bons pour la synchronisation, mais leur mauvaise utilisation complique le code.
Un exemple de mauvaise solution — lancer une goroutine sans contexte ni contrôle :
func process() {
go func() {
// boucle infinie sans possibilité d'arrêt
for {
// travail
}
}()
}
Il est préférable d'utiliser le contexte pour l'annulation :
func process(ctx context.Context) {
go func() {
for {
select {
case <-ctx.Done():
return
default:
// travail
}
}
}()
}