Sobes.tech
Middle — Senior

¿Puedes dar ejemplos de soluciones arquitectónicas que resultaron ser incorrectas o ineficaces, y explicar por qué?

sobes.tech AI

Respuesta de la IA

Las soluciones arquitectónicas incorrectas o ineficaces en Go a menudo están relacionadas con la aplicación incorrecta de los principios del lenguaje y patrones:

  • Estructura monolítica demasiado grande. Cuando todo el código está concentrado en un solo paquete o archivo, esto dificulta el mantenimiento y las pruebas.
  • Falta de interfaces para abstracciones. En Go, las interfaces permiten reemplazar fácilmente las implementaciones, pero si no se usan, el código se vuelve rígido.
  • Uso de variables globales para el estado. Esto conduce a problemas con la concurrencia y las pruebas.
  • Manejo incorrecto de las goroutines. Por ejemplo, lanzar goroutines sin control de su finalización o sin contexto, lo que lleva a fugas de recursos.
  • Uso excesivo de canales donde funciones simples serían suficientes. Los canales son útiles para sincronización, pero su uso incorrecto complica el código.

Un ejemplo de mala solución es lanzar una goroutine sin contexto ni control:

func process() {
    go func() {
        // ciclo infinito sin posibilidad de detenerse
        for {
            // trabajo
        }
    }()
}

Es mejor usar context para cancelar:

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